coolxv/cpp-stub

请教一下Inline Hook之后有办法在stub函数中调用原函数执行吗?

wcventure opened this issue · 2 comments

您好,

感谢您提供那么好用的开源库,我有个问题想请教一下您,希望您能解答一二。

我现在有个场景需要在Stub函数中调用原函数(例如下面的例子,malloc函数已经被替换成malloc_hook函数malloc_hook函数会额外维护一些关于分配的内存地址和内存大小等信息,并调用原函数“malloc”分配内存)。以下代码这种方式hook了malloc函数后,所以malloc_hook内部的malloc函数也会被hook,实际变成了递归函数,与预期不符。

有没有办法在执行了stub.set(malloc, malloc_hook);的情况下,仍有一种方式可以调用原来的malloc函数?

void* malloc_hook(size_t size) {
    printf("Malloc tries to allocate %ld size of memory\n", size);
    //stub.reset(malloc); // 1. 性能影响; 2.多线程有锁和信号量等同步机制时会发生时序问题
    void* = malloc(size);
    //stub.set(malloc, malloc_stub); 
    return ret;
}

int main( ) {
    Stub stub;
    stub.set(malloc, malloc_hook);

    A();
   
    stub.reset(A);
    return 0;

Trampolines功能,本框架不支持。可以参考subhook

感谢解答