我是asm的新手,我问自己以下(简单的)问题:如果我在esp中有一个数组,我会这样写:
mov ebx,[esp + 0x10]
mov edx,[esp + 0x10]edx是否具有与ebx相同的值?
关于lea (我看到这里有很多主题,所以只是检查一下我是否正确地理解^^),如果是这样的话:
lea ebx, [esp + 0x8c]
and ebx, 0x4and会影响ebx的地址或它所指向的值?
我的最后一个问题(仍然是关于lea),如果我知道的话:
lea edx, [esp, 0x10]
movzx ecx, [edx-0x5]mov从地址中减去5,还是从edx所指向的值中再次减去5?
发布于 2020-07-31 11:54:24
会有与ebx相同的值吗?
是的,因为您将相同的值移动到edx和ebx中。
和影响ebx地址或它所指向的值?
and将将和操作应用到地址esp + 0x8c。
,mov从地址中减去5,还是从edx所指向的值中再次减去5?
寻址模式从edx中的数字中减去5,从而创建一个地址。位于此位置的字节或2字节内存块是movzx的源操作数,它加载和零扩展它。(您忘记指定源操作数大小,这样就不会实际组装。)
mov只是复制数据而不对其进行变异;您可以认为地址数学首先发生;寻址模式对所有指令的工作方式都是一样的。( LEA作为不取消地址引用的特例。)
最后一个问题的例子是:
uintptr_t edx = 0x10 + (uintptr_t)esp;
uint32_t ecx = *(uint8_t*)(edx-0x5);或者作为C代码:
char* someChars=malloc(32);
//Fill someChars
uint8_t* edx = &someChars[0x10];
uint32_t ecx = edx[-5]; // ==someChars[11]https://stackoverflow.com/questions/63191247
复制相似问题