汇编解析随记

来源:互联网 发布:甲午中日战争知乎 编辑:程序博客网 时间:2024/06/12 19:39

1. push register指令并不意味着保存寄存器内容,有可能是分配4个字节的栈空间,例如如下源代码

int _tmain(int argc, _TCHAR* argv[]){int* p =NULL;*p = 10;return 0;}
汇编指令为

int _tmain(int argc, _TCHAR* argv[]){00E91000 55                   push        ebp  00E91001 8B EC                mov         ebp,esp  00E91003 51                   push        ecx  int* p =NULL;00E91004 C7 45 FC 00 00 00 00 mov         dword ptr [p],0  *p = 10;00E9100B 8B 45 FC             mov         eax,dword ptr [p]  00E9100E C7 00 0A 00 00 00    mov         dword ptr [eax],0Ah  return 0;00E91014 33 C0                xor         eax,eax  }
可以看到为了给变量p分配栈空间,编译器采用了push ecx方式,而非sub esp, 4。

0 0
原创粉丝点击