我在我们的一个类中使用C和ASM {}来完成汇编程序项目,我们必须加密输入字符串,传输和解密它 .
密钥被加载到一个空的C char数组(20个字符长),然后用于XOR语句加密 .
加载数组地址的代码是:
lea esi,关键
它将'key'的地址放入esi . 当我们在调试模式下检查寄存器时,这里的地址与键数组的地址相同,所以我们知道它有效 .
mov edx,[esi]
我们认为这会将esi的第一个索引的值移动到edx中,因为我们使用“mov [esi],eax”将寄存器的值放入esi数组中 . 反过来看似合乎逻辑 .
但是,edx实际获得的值是“875575655”(最后一次运行)或类似值 . 对于char值来说太大了 .
我觉得我们可能会错误地访问数组,任何建议都会受到赞赏 .
注意:通常为了增加数组索引,我们只是使用inc esi然后像上面那样读取,这就是我们计划从数组中读取的方式 .
2 回答
使用
mov edx, [esi]
,您读取DWORD(因为edx
大小是双字) . 使用mov dl, [esi]
读取字节 .hexa中的
875575655
是0x34303967,即字符串'g904' .要解释:虽然逻辑上它是一个字符串,但您可以一次加载更多字符 . 因此,您可以在DWORD上进行5次此类操作,而不是生成20字节的加载和xors .