我有以下代码,应该在断点处显示123位于eax,321位于ecx。由于某些原因,没有发生。有人在乎解释原因吗?
push ebp;
mov ebp, esp;
sub esp, 8;
mov [ebp-4], 123;
mov [ebp-8], 321;
mov eax, [ebp-4];
mov ecx, [ebp-8];
pop ebp; <------------- breakpoint here
retn;
我想错误的是我做不到
mov [ebp-4], 123
其他一切对我来说都很好。
由于
编辑:值为: eax 1505915; ecx 1720129;
答案 0 :(得分:8)
您将字节值存储到内存中。
更改为
mov dword ptr [ebp - 4], 123
mov dword ptr [ebp - 8], 321
eax = 1505915是0x16FA7B。最后一个字节是十六进制的7B,十进制为123。 ecx = 1720129是0x1A3F41。十六进制41是321(141)的最后一个字节。
答案 1 :(得分:1)
我的印象是(我可能错了)你不能将值推送到这样的内存地址。你必须通过寄存器:
MOV EAX, 123
MOV [EBP-4], EAX
正如我所说,我可能错了。但试一试。查看说明书手册。它将向您展示您可以对哪种寻址模式执行哪些操作。