首页
社区
课程
招聘
[求助]hook api 调用约定出错
发表于: 2009-9-6 14:58 3989

[求助]hook api 调用约定出错

2009-9-6 14:58
3989
我想hook一个存在与dll中的函数 函数的导出类型为(ida):
.text:10001630 ; void __cdecl ZNet2::DWordDecode(unsigned char *, int, __int64 &)
.text:10001630                 public ?DWordDecode@ZNet2@@YAXPAEHAA_J@Z

我在VC中 声明 :
class ZNet2
{
public:
   void __cdecl ZNet2::DWordDecode(unsigned char *, int, __int64 &);
   ZNet2();
   virtual ~ZNet2();
};
调用:

编译时提示:
unresolved external symbol "public: void __cdecl ZNet2::DWordDecode(unsigned char *,int,__int64 &)" ()

发现编译的类型与导出的类型不同
?DWordDecode@ZNet2@@YAXPAEHAA_J@Z
?DWordDecode@ZNet2@@QAAXPAEHAA_J@Z

查看相关资料__cdecl调用约定:
1、以“?”标识函数名的开始,后跟函数名;
2、函数名后面以“@@YA”标识参数表的开始,后跟参数表;
3、参数表以代号表示:
X--void ,
D--char,
E--unsigned char,
F--short,
H--int,
I--unsigned int,
J--long,
K--unsigned long,
M--float,
N--double,
_N--bool,
PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复;
4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;
5、参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束

不知道在vc中怎样修改才可以通过 ?希望各位大侠指点一二,不胜感激

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
经测试 ZNet2 是个namespace(其实看名字就有点感觉不像类名)
namespace ZNet2
{
void __cdecl DWordDecode(unsigned char *, int, __int64 &);

};
2009-9-6 15:22
0
雪    币: 375
活跃值: (181)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢leftup 测试解决
2009-9-6 15:53
0
游客
登录 | 注册 方可回帖
返回
//