vs2005中,断点断在要反汇编的程序中,alt + 8 显示反汇编窗口

代码如下:

 
  
  1. // TestMem.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.  
  4. #include "stdafx.h"  
  5. #include <memory.h> 
  6.  
  7. void f(int param1, int param2, int param3)  
  8. {  
  9. 004113A0  push        ebp    
  10. 004113A1  mov         ebp,esp   
  11. 004113A3  sub         esp,0E4h   
  12. 004113A9  push        ebx    
  13. 004113AA  push        esi    
  14. 004113AB  push        edi    
  15. 004113AC  lea         edi,[ebp-0E4h]   
  16. 004113B2  mov         ecx,39h   
  17. 004113B7  mov         eax,0CCCCCCCCh   
  18. 004113BC  rep stos    dword ptr es:[edi]   
  19.     int local1 = 1;  
  20. 004113BE  mov         dword ptr [local1],1   
  21.     int local2 = 2;  
  22. 004113C5  mov         dword ptr [local2],2   
  23.     int local3 = 3;  
  24. 004113CC  mov         dword ptr [local3],3   
  25.     memset(&local3, 0, 24);  
  26. 004113D3  push        18h    
  27. 004113D5  push        0      
  28. 004113D7  lea         eax,[local3]   
  29. 004113DA  push        eax    
  30. 004113DB  call        @ILT+460(_memset) (4111D1h)   
  31. 004113E0  add         esp,0Ch   
  32.     local3 = local1 + local2;  
  33. 004113E3  mov         eax,dword ptr [local1]   
  34. 004113E6  add         eax,dword ptr [local2]   
  35. 004113E9  mov         dword ptr [local3],eax   
  36. }  
  37.  
  38.  
  39. --- e:\myproject\testmem\testmem.cpp -------------------------------------------  
  40.  
  41. //param3->param2->param1->call_next_addr->local1->local2->local3  
  42. int _tmain(int argc, _TCHAR* argv[])  
  43. {  
  44. 00411450  push        ebp    
  45. 00411451  mov         ebp,esp   
  46. 00411453  sub         esp,0C0h   
  47. 00411459  push        ebx    
  48. 0041145A  push        esi    
  49. 0041145B  push        edi    
  50. 0041145C  lea         edi,[ebp-0C0h]   
  51. 00411462  mov         ecx,30h   
  52. 00411467  mov         eax,0CCCCCCCCh   
  53. 0041146C  rep stos    dword ptr es:[edi]   
  54.     f(1, 2, 3);  
  55. 0041146E  push        3      
  56. 00411470  push        2      
  57. 00411472  push        1      
  58. 00411474  call        f (411195h)   
  59. 00411479  add         esp,0Ch   
  60.     return 0;  
  61. 0041147C  xor         eax,eax   
  62. }  
  63.  

局部变量地址:
 


程序观察的结果:
1,执行memset语句前的

 

2,执行memset语句后的
 
结论堆栈结构:
Param3=>Param2=>param1=>call_next_addr=>local1=>local2=>local3

扩展如果有数组,则设为int a[4], 则栈为....=>a[3]=>a[2]=>a[1]=>a[0]