Пользовательские функции пролога / эпилога для профилирования - PullRequest
4 голосов
/ 04 июня 2009

Можно ли с помощью компиляторов Visual Studio написать 2 функции, которые вызываются до вызова других функций и после их выполнения? В gcc вы можете сделать это с помощью __cyg_profile_func_*() функций:

void __cyg_profile_func_enter(void *func_address, void *call_site )
                                __attribute__ ((no_instrument_function));

void __cyg_profile_func_exit (void *func_address, void *call_site )
                                __attribute__ ((no_instrument_function));

Мне нужно решение, которое работает для программного обеспечения режима ядра. Я думаю, что Microsoft Detours может помочь, но бесплатная версия только 32-битная, а мои драйверы чисто 64-битные.

Я хочу сгенерировать граф вызовов для конкретного кода.

Спасибо.

1 Ответ

5 голосов
/ 04 июня 2009
  1. Вы можете использовать переключатель / Gh / GH cl для создания хитов penter / pexit.
  2. Для бесплатных API для перехвата взгляните на:
    2,1 easyhook
    2.2 N-CodeHook
...