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

时间:2010-12-06 15:47:11

标签: arrays x86 intel assembly

我在我们的一个类中使用C和ASM {}来完成汇编程序项目,我们必须加密输入字符串,传输和解密它。

密钥被加载到一个空的C char数组(20个字符长)中,然后在XOR语句中用于加密。

加载数组地址的代码是:

  

lea esi,key

将'key'的地址放入esi。当我们在调试模式下检查寄存器时,这里的地址与键数组的地址相同,所以我们知道它有效。

  

mov edx,[esi]

我们认为这会将esi的第一个索引的值移动到edx中,因为我们使用“mov [esi],eax”将寄存器的值放入esi数组中。反过来看似合乎逻辑。

但是,edx实际获得的值是“875575655”(最后一次运行)或类似值。对于char值来说太大了。

我觉得我们可能会错误地访问数组, 任何建议将不胜感激。

注意:通常为了增加数组索引,我们只是使用inc esi然后像上面那样读取,这就是我们计划从数组中读取的方式。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

hexa中的

875575655为0x34303967,即字符串'g904'。

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