在汇编程序中访问数组成员
我在我们的一个类中使用了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