一般在对c/c++函数的hook方法MSHookFunction都写在 %ctor {}里,比方说目标app中有一个c函数void test(),我现在需要hook掉这个test()函数,如果在%ctor执行之前目标app中就调用了test()函数,那对test的hook显然就失败了,我现在的疑问是我的插件hook一个app之后,插件中 %ctor的调用时机是什么时候,或者说怎样做才能使hook对全局的app都有效,不管目标app中何时调用test()函数?
@snakeninny,求狗神解惑!
我印象中,%ctor
在main
前就调用了,你可以写个demo试试看;test
怎么着也得在main
之后调用吧?
不存在你说的情况
%ctor确实是在main之前调用的
那你在ctor
里hook test
的话就没有问题啊
嗯啊,之前我是怀疑有些app会在main函数之前做些啥操作,后来发现是自己想多了
看下dyld源码,主程序的都是最后才执行
还有一种办法就是直接改二进制的 test 函数的指令,绝对安全可靠。
用啥框架修改呀
嗯啊,刚去查了下主程序之前系统执行的操作
https://github.com/opensource-apple/dyld/blob/master/src/ImageLoader.cpp#L493
按照依赖顺序调用的, 然而插件和主程序互不依赖, 但是加载时机早很多
明白,dyld会先加载链接所有的动态库,然后再跳到主程序的入口,插件加载时间确实是早于主程序