hook api 编译出错 求助

gegon007 2009-09-06 03:01:42
我想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中怎样修改才可以通过 ?希望各位大侠指点一二,不胜感激
...全文
137 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
似水流年__ 2010-01-10
  • 打赏
  • 举报
回复
不用猜了,这是一个网游的dll
lz肯定是搞外挂的
ZNet2是namespace
拿IDA看下就知道了
namesapce ZNet2
{
Decode(...){........}
DwordDecode(...){....}
class TCPClient
{
..........
};
}

我说的应该没错吧
SolidRabbit 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xsgluozi 的回复:]
这是为什么呢,有没有人能解释一下呢
[/Quote]

我猜,是这样的:
class ZNet2
{
public:
void __cdecl ZNet2::DWordDecode(unsigned char *, int, __int64 &);
ZNet2();
virtual ~ZNet2();
};
中ZNet2的声明还没有完成,所以ZNet2里也不会有DWordDecode

就像
struct test
{
char cTest;
struct stTest;
} ;
一样
lllyyy2403 2010-01-03
  • 打赏
  • 举报
回复
jf
zoulie 2009-12-29
  • 打赏
  • 举报
回复
up,jf
哈利路亚1874 2009-12-27
  • 打赏
  • 举报
回复
友情帮顶!
nothize 2009-09-06
  • 打赏
  • 举报
回复
不知道使用 dumpbin /symbols [file].obj 會不會比解讀 mangled name 更加方便確認連結問題?
x22ray 2009-09-06
  • 打赏
  • 举报
回复
哈哈,恭喜楼主呢!
你这不就是一个引用dll中的函数的问题嘛。。还说成hook aip呵呵
晒月光的青蛙 2009-09-06
  • 打赏
  • 举报
回复
这是为什么呢,有没有人能解释一下呢
zoulie 2009-09-06
  • 打赏
  • 举报
回复
UP
MoXiaoRab 2009-09-06
  • 打赏
  • 举报
回复
过来接分
maple_zhj 2009-09-06
  • 打赏
  • 举报
回复
改成 命名空间 就行了?
gegon007 2009-09-06
  • 打赏
  • 举报
回复
namespace ZNet2
{
int __cdecl DWordDecode(unsigned char *, int, __int64 &);
};

自己解决了 谢谢各位

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧