【发布时间】:2011-10-27 14:53:01
【问题描述】:
我在我的代码中挂钩了几个函数,直到今天它的代码都很漂亮,然后由于回调函数,我遇到了一个错误。
让我们说..
如果我做类似的事情
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;
}
}
...
}
所以,这里发生的事情是,我用我的实现更改地址表中对应符号的条目,在我的实现中我调用原始函数。
所以,我的猜测是,如果我们使用回调函数,这意味着我们直接引用函数地址而不通过地址表,这就是为什么不调用钩子方法的原因。
我说的对吗?如果是这样,任何人都可以建议我任何解决方法吗?
【问题讨论】:
-
typeof在 C++ 中? 0_o ,看起来像 C# 代码 -
@Mr.Anubis typeof 是 C 和 C++ 的 GCC 扩展。
-
@Mac:挂钩可以表示任意数量的东西,具体取决于上下文。
-
我认为你误用了钩子这个词。挂钩通常意味着拦截一个正常的呼叫并用你自己的替换它。
-
我知道 typedef。 typeof 只是获取回调函数的快捷方式。