VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1380|回复: 2

[交流] 数组反汇编

[复制链接]
39_avatar_middle
最佳答案
0 
在线会员 发表于 2021-9-23 16:34:01 | 显示全部楼层 |阅读模式
  1. code:
  2. int  Function(int x,int y)
  3. {
  4.         int Arr[10]={1,2,3,4,5,6,7,8,9,10};

  5.         return Arr[x]+Arr[y];
  6. }


  7. void main()
  8. {
  9.         int x=1;
  10.         int y=2;
  11.         int r=Function(x,y);
  12.         printf("r=%d",r);
  13.        
  14. }


  15. 数组寻址:
  16. //参数传递
  17. 0040D808   mov         dword ptr [ebp-4],1         // 1赋值给局部变量x, 2赋值给局部变量y;
  18. 0040D80F   mov         dword ptr [ebp-8],2
  19. 0040D816   mov         eax,dword ptr [ebp-8]
  20. 0040D819   push        eax                         // 2入栈
  21. 0040D81A   mov         ecx,dword ptr [ebp-4]
  22. 0040D81D   push        ecx                        // 1入栈
  23. 0040D81E   call        @ILT+15(Function) (00401014)  // CALL ESP-4  040D823 返回值保存在ESP+4中
  24. 0040D823   add         esp,8
  25. 0040D826   mov         dword ptr [ebp-0Ch],eax
  26. 0040D829   mov         edx,dword ptr [ebp-0Ch]
  27. 0040D82C   push        edx
  28. 0040D82D   push        offset string "r=%d" (00422f9c)
  29. 0040D832   call        printf (0040d6f0)

  30. //因为是cdecl call,所以是先压第二个参数,也就是EBP-8先入栈,两个参数入栈,然后call 函数00401014 此时在压一次栈,栈中值为call下一行地质也就是0040D823,用于ret   所以此时的ESP 指向返回地址,而ESp+4指向第一个参数,ESP+8指向第二个参数。



  31. //接着EBP入栈,此时的ESP指向原始EBP。 mov ebp,esp ,这一句将栈顶指针赋值给EBP保存起来。EBP和ESP指向的都是EBP。,所以EBP+4也就是指向返回地址,也就是0040D823,而EBP+8指向参数,这也就是为什么参数是EBP-4,而EBP+4指向返回地址,EBP+8是参数的原因了。


  32. 0040D770  /> \55            PUSH EBP                                 ;  原始EBP入栈, esp 中保存的就是原始EBp
  33. 0040D771  |.  8BEC          MOV EBP,ESP                              ;  EBP=ESP,保存栈针,此时EBp+4就是返回值,EBP+8就是参数2
  34. 0040D773  |.  83EC 68       SUB ESP,68
  35. 0040D776  |.  53            PUSH EBX
  36. 0040D777  |.  56            PUSH ESI
  37. 0040D778  |.  57            PUSH EDI                                 ;  保存即将使用的寄存器
  38. 0040D779  |.  8D7D 98       LEA EDI,DWORD PTR SS:[EBP-68]            ;  取抬升地址
  39. 0040D77C  |.  B9 1A000000   MOV ECX,1A
  40. 0040D781  |.  B8 CCCCCCCC   MOV EAX,CCCCCCCC
  41. 0040D786  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]              ;  填充缓冲区
  42. 0040D788  |.  C745 D8 01000>MOV DWORD PTR SS:[EBP-28],1
  43. 0040D78F  |.  C745 DC 02000>MOV DWORD PTR SS:[EBP-24],2
  44. 0040D796  |.  C745 E0 03000>MOV DWORD PTR SS:[EBP-20],3
  45. 0040D79D  |.  C745 E4 04000>MOV DWORD PTR SS:[EBP-1C],4
  46. 0040D7A4  |.  C745 E8 05000>MOV DWORD PTR SS:[EBP-18],5
  47. 0040D7AB  |.  C745 EC 06000>MOV DWORD PTR SS:[EBP-14],6
  48. 0040D7B2  |.  C745 F0 07000>MOV DWORD PTR SS:[EBP-10],7
  49. 0040D7B9  |.  C745 F4 08000>MOV DWORD PTR SS:[EBP-C],8
  50. 0040D7C0  |.  C745 F8 09000>MOV DWORD PTR SS:[EBP-8],9
  51. 0040D7C7  |.  C745 FC 0A000>MOV DWORD PTR SS:[EBP-4],0A              ;  数组赋值
  52. 0040D7CE  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]             ;  取参数到EAX
  53. 0040D7D1  |.  8B4485 D8     MOV EAX,DWORD PTR SS:[EBP+EAX*4-28]      ;  数组访问宽度为4,EAX为1,EBP-28+4=ebp-24  取2
  54. 0040D7D5  |.  8B4D 0C       MOV ECX,DWORD PTR SS:[EBP+C]             ;  取先压得参数到ECX   eax为[ebp-20]为3
  55. 0040D7D8  |.  03448D D8     ADD EAX,DWORD PTR SS:[EBP+ECX*4-28]
  56. 0040D7DC  |.  5F            POP EDI
  57. 0040D7DD  |.  5E            POP ESI
  58. 0040D7DE  |.  5B            POP EBX
  59. 0040D7DF  |.  8BE5          MOV ESP,EBP
  60. 0040D7E1  |.  5D            POP EBP
  61. 0040D7E2  \.  C3            RETN


复制代码




上一篇:在窗口中绘制一条直线 有什么方法存储
下一篇:数组指针的使用和数组的加密解密
39_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-9-23 16:50:07 | 显示全部楼层
总结一下: push ebp;  mov  ebp,esp    esp->原始ebp,ebp=esp->[原始EBP],所以EBP寄存器中保存的地址指向的值就是原始EBP。
39_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-9-29 18:39:06 | 显示全部楼层
哎。。。。。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-29 14:15

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表