首页
社区
课程
招聘
[讨论]关于非入栈的寄存器变量是否会在函数中参与运算?
发表于: 2005-8-16 11:59 4151

[讨论]关于非入栈的寄存器变量是否会在函数中参与运算?

2005-8-16 11:59
4151
<br>0049AE08  |. 50             PUSH EAX
<br>0049AE09  |. 6A 00          PUSH 0
<br>0049AE0B  |. 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]                        //ecx==0
<br>0049AE0E  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]                        //edx==机器码
<br>0049AE11  |. 8BC3           MOV EAX,EBX
<br>0049AE13  |. E8 38000000    CALL AccessPa.0049AE50

例如,这段代码,没有被push的CALL前面的ecx,edx,eax(也就是非参数)是否还会在CALL内被用到?

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 76
活跃值: (45)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
2
最初由 ghost_cracker 发布
<br>0049AE08 |. 50 PUSH EAX
<br>0049AE09 |. 6A 00 PUSH 0
<br>0049AE0B |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] //ecx==0
<br>0049AE0E |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] //edx==机器码
<br>0049AE11 |. 8BC3 MOV EAX,EBX
........

很有可能被用到的。如果调用的函数是类的成员函数的话,ecx 就是 this 指针。如果是 release 版本的话有的时候代码被优化后就会用积存器做参数用
2005-8-16 14:01
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,我明白了
2005-8-16 14:25
0
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
除了用堆栈传递参数,用寄存器也可传递参数,例如__fastcall调用就这情况,你用Google搜索就知了。
2005-8-16 17:23
0
雪    币: 111
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
看到牛人了~
跟帖以示崇拜
2005-8-16 19:22
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
6
参数传递可以用堆栈,寄存器,或者全局变量 ,就这3种,M$用ECX传递THIS指针,宝蓝的基本是EDX或者EAX.你这个应该是DELPHI程序,EAX是THIS指针.
键盘太垃圾,大不来字了.汗
2005-8-16 19:33
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
nbw你真强啊,能通过参数传递就看出用什么语言编写的,厉害
2005-8-17 11:40
0
雪    币: 222
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
nbw,delphi里的字符串类,是不是开始一个字是做标志,紧跟的一个字是字符串的长度,再跟的就是字符串本体了?
2005-8-17 16:34
0
游客
登录 | 注册 方可回帖
返回
//