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

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

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

加载数组地址的代码是:

lea esi,钥匙

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

mov edx,[esi]

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

然而,edx实际得到的值是“875575655”(上次运行)或类似。 对于char值来说太大了。

我感觉我们可能访问错误的数组,任何意见,将不胜感激。

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


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


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

解释:在逻辑上它是一个字符串,你可以一次加载更多的字符。 所以,不要做20字节的加载和xors,你可以在DWORD上做5个这样的操作。

链接地址: http://www.djcxy.com/p/62693.html

上一篇: Accessing array members in assembler

下一篇: array of 2s power using template in c++