如何 hook C++ 类中的某个方法


#1

如题,尝试hook dyld中ImageLoader这个类的一个方法 const char* getRealPath(),仿照hook C的套路,使用MSHookFunction,直接上代码:

MSHookFunction((constchar**)MSFindSymbol(MSGetImageByName("/usr/lib/dyld"),"_getRealPath") ,(const char**)repl_getRealPath,(const char***)&orig_getRealPath);

hook失败,然后使用 nm dyld 找到符号表 __ZNK11ImageLoader11getRealPathEv,再次尝试,

MSHookFunction((constchar**)MSFindSymbol(MSGetImageByName("/usr/lib/dyld"),"__ZNK11ImageLoader11getRealPathEv") ,(const char**)repl_getRealPath,(const char***)&orig_getRealPath);

还是失败,查看findSymbol的返回值,
void * pathSymbol=MSFindSymbol(MSGetImageByName("/usr/lib/dyld"), “__ZNK11ImageLoader11getRealPathEv”);

两次都是null,所以想请教下各位大大,是不是我的方法有误,怎么才能正确找到这个函数的地址?


#2

都过了14小时了,就没人回答的么


#3

改成_ZNK11ImageLoader11getRealPathEv试试?即去掉一个下划线


#4

不是。。。。。。dyld要单独处理


#5

拿到dyld的基地址再加上偏移hook才行。正常hook好像是不行的


#6

这个也试过了,还是不行,我把dyld这个库丢到IDA中,看到的符号跟nm看到的是一致的,
9C2113ABD7950E6323016D6662ADE359


#7

dyld这么特殊么


#8

再请教一下,dyld这个动态库加载器的基地址怎么获取啊,我通过_dyld_register_func_for_add_image dladdr 和 _dyld_get_image_name 都没看到dyld这个模块