能力值:
( LV2,RANK:10 )
|
-
-
2 楼
当这样写时:
。。。。。
sub esp,9
//"calc"
mov byte ptr [ebp-05h],63h ;c
mov byte ptr [ebp-04h],61h ;a
mov byte ptr [ebp-03h],6ch ; l
mov byte ptr [ebp-02h],63h ;c
mov byte ptr [ebp-1h],0
lea eax,[ebp-05h]
push eax ;OD调试:eax为"calc"的地址没错。。
call ebx ;OD调试ebx为system函数地址,也没错
add esp,4
mov esp,ebp
pop ebp
为什么运行后什么都没显现?如果改为 sub esp,n(n为4的倍数),结果就对了。。求解释??
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
因为对于32位PC机,内存都是按四字节对齐,尤其是栈,也就是esp的值,32位PC机,push pop指令都是固定的推入和弹出 四个 字节 , 具体我没拉你的代码去调试,不过按理应该是有一种专门检查esp的值的机制,当esp的值不是4的倍数的时候会产生一个异常。。。 64位CPU的话,就会变成8个字节。。。。会变成8的倍数
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
push eax ;OD调试:eax为"calc"的地址没错。。
call ebx ;OD调试ebx为system函数地址,也没错
虽然说要按照4个字节对齐, 但是用OD调试,没发现什么异常,,就是不能运行,,
|
|
|