首页
社区
课程
招聘
[求助]《加密解密3》第四章里的一个堆栈传递参数的问题
发表于: 2008-10-5 17:41 4228

[求助]《加密解密3》第四章里的一个堆栈传递参数的问题

2008-10-5 17:41
4228
在第四章4.2.2节,给出的小程序反汇编后的其中一段代码如下:
0040101F  /$  55            push    ebp
00401020  |.  8BEC          mov     ebp, esp
00401022  |.  83EC 04       sub     esp, 4
00401025  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
00401028  |.  8B5D 08       mov     ebx, dword ptr [ebp+8]
0040102B  |.  895D FC       mov     dword ptr [ebp-4], ebx
0040102E  |.  0345 FC       add     eax, dword ptr [ebp-4]

00401031  |.  83C4 04       add     esp, 4
00401034  |.  5D            pop     ebp
00401035  \.  C2 0800       retn    8

弱弱的问一下,代码中蓝色部分是否可以直接用add eax,ebx来代替呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
在这里是可以的
2008-10-6 03:04
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢版主回复
2008-10-6 11:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没有看明白。。。。
2008-10-6 12:04
0
雪    币: 414
活跃值: (531)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
在第四章4.2.2节,给出的小程序反汇编后的其中一段代码如下:
你说的那个[ebp-4]的情况是因为编译造成的,定义了变量
在写代码中可能是这样写的:
Function ABC(a,b:integer):integer;
var
  i:integer;
begin
  i:=b;
  a:=a+i;
  abc:=a;
end;

初始
00001000 aaaaaaaa   <- ESP
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

0040101F  /$  55            push    ebp

00000FFC EBP        <- ESP
00001000 aaaaaaaa
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

00401020  |.  8BEC          mov     ebp, esp   ;EBP=00000FFC
00401022  |.  83EC 04       sub     esp, 4

00000FF8 ????????   <- ESP
00000FFC EBP     
00001000 aaaaaaaa
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

00401025  |.  8B45 0C       mov     eax, dword ptr [ebp+C]   ;EAX=[00001008]=XXXXXXXX
00401028  |.  8B5D 08       mov     ebx, dword ptr [ebp+8]   ;EBX=[00001004]=XXXXXXXX
0040102B  |.  895D FC       mov     dword ptr [ebp-4], ebx   ;[EBP-4]=[00000FFC-4]=[00000FF8]=????????<-EBX=XXXXXXXX

00000FF8 XXXXXXXX   <- ESP
00000FFC EBP     
00001000 aaaaaaaa
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

0040102E  |.  0345 FC       add     eax, dword ptr [ebp-4]   ;EAX=EAX+[00000FF8]=EAX+XXXXXXXX
00000FF8 XXXXXXXX   <- ESP
00000FFC EBP     
00001000 aaaaaaaa
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

00401031  |.  83C4 04       add     esp, 4
00000FFC EBP     <- ESP
00001000 aaaaaaaa
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

00401034  |.  5D            pop     ebp
00001000 aaaaaaaa <- ESP
00001004 XXXXXXXX
00001008 XXXXXXXX
0000100C XXXXXXXX
00001010 XXXXXXXX

00401035  \.  C2 0800       retn    8 ; EIP=aaaaaaaa  ESP=0000100C
2008-10-6 16:58
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=nig;517578]在第四章4.2.2节,给出的小程序反汇编后的其中一段代码如下:
你说的那个[ebp-4]的情况是因为编译造成的,定义了变量
在写代码中可能是这样写的:
Function ABC(a,b:integer):integer;
var
  i:integer;
begin
  i:=b;
...[/QUOTE]

非常感谢nig兄的详细回答,很形象明了
2008-10-9 15:26
0
游客
登录 | 注册 方可回帖
返回
//