首页
社区
课程
招聘
一个疑问,按地址调用的汇编码?
发表于: 2004-12-9 23:28 4953

一个疑问,按地址调用的汇编码?

2004-12-9 23:28
4953
请问第36页的代码:

      push ebp
      mov ebp, esp
      mov eax, [ebp+0c]
      mov ecx, [ebp+08]
      add eax, ecx
      lea ebx, [ebp+10]
      mov [ebx], eax
      leave
      ret 0c

其中  lea ebx, [ebp+10] 是否应该是 mov ebx, [ebp+10] ?


[课程]Linux pwn 探索篇!

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
lea ebx, [ebp+10]
是将ebp+10这个值放到ebx

mov [ebx], eax
将eax的值赋给变量
2004-12-10 18:34
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我不用pascal的,所以我写了一个C++的程序模拟那个Pascal过程:

void MyAdd2(int y, int x, int& res)   //考虑了C++和Pascal传递的顺序不同
{
        res = x + y;
}

反汇编的结果:

00401290  /$ 55             PUSH EBP
00401291  |. 89E5           MOV EBP,ESP                                     
00401293  |. 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]            
00401296  |. 8B55 08        MOV EDX,DWORD PTR SS:[EBP+8]
00401299  |. 01D0           ADD EAX,EDX
0040129B  |. 8B55 10        MOV EDX,DWORD PTR SS:[EBP+10]    ;  取ret,  注意不是lea eax, ...
0040129E  |. 8902           MOV DWORD PTR DS:[EDX],EAX
004012A0  |. 5D             POP EBP
004012A1  \. C3             RETN
2004-12-10 21:33
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
书和你的C程序都没错,注意CALL前的入口参数,不要只注意CALL里面的指令形式。

用C写的程序,参数入栈形式是类似如下:

00401021     lea eax,dword ptr ss:[esp] //注意这里和书中不同,所以CALL里面就不同了
00401025     push eax
00401026     push 2
00401028     push 1
0040102A     call dos.00401000
       {
       00401000      mov eax,dword ptr ss:[esp+8]
       00401004      mov ecx,dword ptr ss:[esp+4]
       00401008      mov edx,dword ptr ss:[esp+C]//将esp+C这个值指向的数据给EDX
                                                   (就是00401021 lea eax,xxx  这个EAX的值)
       0040100C      add ecx,eax
       0040100E      mov dword ptr ds:[edx],ecx

       }
2004-12-10 22:24
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢. 懂了.
2004-12-10 22:26
0
游客
登录 | 注册 方可回帖
返回
//