Перехватить конструктор класса c++ с помощью LD_PRELOAD

Я следовал этому примеру для перехвата функций C++ в классе.

Однако теперь я хочу перехватить конструктор и деструктор класса, а не только функции-члены.

В примере он делает typedef unsigned int (Foo::*methodType)() const;. Я не думаю, что вы можете создавать конструкторы/деструкторы typedef в С++.

Как мне это сделать?


person rosewater    schedule 07.10.2014    source источник
comment
Это ужасный хак, но я предполагаю, что конструктор или деструктор ведут себя как void (Foo::*method)() методы и могут быть подделаны как таковые. Небольшое тестирование с помощью дизассемблера или некоторые исследования ABI вашей платформы должны подтвердить это.   -  person Josh Kelley    schedule 08.10.2014


Ответы (1)


Я попробовал typedef void (QDBusConnection::*MyFunction)();, и он работает, я могу вызвать его с помощью (this->*origMethod)();, хотя origMethod является деструктором и не имеет спецификатора возврата.

Я написал свои шаги о том, как сделать деструктор перехвата и функции статического класса здесь

http://www.osletek.com/learning-center/150/Intercepting_C%2B%2B_functions_using_LD_PRELOAD

person rosewater    schedule 08.10.2014