首页
社区
课程
招聘
关于参数通过ecx传递的问题
2004-11-21 08:55 5903

关于参数通过ecx传递的问题

2004-11-21 08:55
5903
反编译后,发现好多目标函数都是以ecx传递第2个参数(包括那些很少参数的,如2个),这个是什么原因造成得?

如果我想自己定义得函数参数也遵从这个得参数传递规范(主要是想用自己得函数拦截他,又不想维护堆栈-这样作太死板,不通用!),该怎么作?
  谢谢!

俺是新手,对这方面很少了解,去查精华,也不知道这个问题该怎样查,只好发了,呵呵!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 1
打赏
分享
最新回复 (9)
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binglan212 2004-11-21 09:19
2
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2004-11-21 09:21
3
0
用fastcall调用规范

据我所知好像之只有DELPHI是这样干的
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
comelysouthchin 2004-11-21 09:48
4
0
使用ECX 来传递参数的调用规则有两种,一直是 __fastcall , fast call 之所以被成为 fast ,是因为这种调用方式不是把所有的参数都放在堆栈中,只是参数多余 2 个的时候才使用堆栈, fast call 这种调用规则,是借助ECX 、EDX 寄存器完成参数传递的过程,   另外一直借助 ECX 来完成参数传递的调用规则就是 thiscall ,这种调用规则使用在C++,大家在学习C++,的时候,都回遇到这样的问题,就是C++函数的参数,实际的参数个数比型参多一个,就是对象自身的指针this,那么this 是怎么传递给函数的呢? 就是通过这个ECX 寄存器传递的。
雪    币: 414
活跃值: (531)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
nig 4 2004-11-21 10:16
5
0
在Delphi编程过程中使用STDCALL方式呢,这样可以定义参数的调用.
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binglan212 2004-11-21 10:27
6
0
又长了一点知识:)
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MiNiGuN-6X 2004-11-21 10:33
7
0
最初由 comelysouthchin 发布
使用ECX 来传递参数的调用规则有两种,一直是 __fastcall , fast call 之所以被成为 fast ,是因为这种调用方式不是把所有的参数都放在堆栈中,只是参数多余 2 个的时候才使用堆栈, fast call 这种调用规则,是借助ECX 、EDX 寄存器完成参数传递的过程, 另外一直借助 ECX 来完成参数传递的调用规则就是 thiscall ,这种调用规则使用在C++,大家在学习C++,的时候,都回遇到这样的问题,就是C++函数的参数,实际的参数个数比型参多一个,就是对象自身的指针this,那么this 是怎么传递给函数的呢? 就是通过这个ECX 寄存器传递的。


非常感谢,呵呵。对于C++得this指针,倒是知道有这么回事,但一直不知道在用ECX传递,汗!

PS:发帖子得时候没注意,“第2个参数”应该改为“最后一个参数”(应该是最后一个吧,或者第一个?呵呵,这个应该不重要,他又不在堆栈里),非常抱歉!

PS+:对于成员函数得拦截,那位大侠知道有啥好方法拦截啊(没源代码,只知道目标函数得地址。对于直接修改目标程序机器码得方式还是不要了,那个难度高-至少对于我来说没法写出复杂得功能,也不通用!)
  再次感谢!
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binglan212 2004-11-21 12:48
8
0
拦截方式也是一样的
最有效的方法就是在函数中加一条
__asm int 3
不知道能编译通过吗?
没试过
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MiNiGuN-6X 2004-11-22 09:14
9
0
最初由 binglan212 发布
拦截方式也是一样的
最有效的方法就是在函数中加一条
__asm int 3
不知道能编译通过吗?
没试过


你这个好像是设断点 跟我的要求好像相差甚远啊 呵呵!
雪    币: 390
活跃值: (707)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
firstrose 16 2004-11-22 20:23
10
0
fastcall用3个reg:eax,edx,ecx以及stack

所以,楼上的说法错误。
游客
登录 | 注册 方可回帖
返回