首页 文章

在汇编程序中访问数组成员

提问于
浏览
1

我在我们的一个类中使用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 回答

  • 2

    使用 mov edx, [esi] ,您读取DWORD(因为 edx 大小是双字) . 使用 mov dl, [esi] 读取字节 .

  • 2

    hexa中的 875575655 是0x34303967,即字符串'g904' .

    要解释:虽然逻辑上它是一个字符串,但您可以一次加载更多字符 . 因此,您可以在DWORD上进行5次此类操作,而不是生成20字节的加载和xors .

相关问题