[英]Cannot hook Callback function?
我在我的代码中挂了几个函数,直到今天才开始使用漂亮的代码,然后由于回调函数我遇到了一个错误。
让我们说..
如果我做的事情
puts("Hi!\n");
效果很好。 我可以勾住这个。
但如果我这样做......
typeof(puts) *fptr = puts;
fptr("Hi \n");
挂钩不起作用?
我正在使用OSX环境并搜索符号以便进行挂钩。 有人可以建议我回调函数有什么问题吗?我应该做些什么来挂钩算法?
编辑:我做了一些调试,如果有以下信息,任何人都可以提供一些意见。
我认为这可能是问题的根源?
bool Hook(const char *name, void *impl) {
...
void **EntryInAdressTable = find(name);
if(EntryInAdressTable) {
*EntryInAdressTable = impl;
}
}
...
}
那么,这里发生的是,我用我的实现更改了相应符号的Entry in地址表,并在我的实现中调用了原始函数。
所以,我的猜测是,如果我们使用回调函数,这意味着我们直接引用函数地址而不通过地址表,这就是为什么不调用hooked方法。
我是对的吗? 如果是这样,任何人都可以建议我解决方法吗?
如果我们通过查看符号表并替换函数地址来挂钩,那么只要我们使用符号表中的符号条目进行函数调用,那么对应于符号条目就会起作用。 如果我们直接使用函数地址(回调函数),它将无法工作。
假设您正在使用LD_PRELOAD
来挂接函数,当您使用指向puts
的指针时,指针可能绑定到链接器在标准库中链接时所知道的版本,并且在预加载库到来时不会被覆盖成为存在。 我想不出任何绕过这个的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.