Поскольку что-то подобное, вероятно, требуется очень редко, вероятно, не стоит выяснять, как это сделать на уровне исходного кода C или перепрыгивать через кучу обручей.
Итак, я бы, вероятно, просто посмотрел на разборку функции, которую я хотел взломать, и установил точку останова на уровне сборки.
В качестве эксперимента я обычно устанавливаю точку останова на строке в code.h
, и окно точки останова отладчика отображалось с деревом точек останова:
o code.h, line 9
|
+-- o code.h, line 9
|
+-- o code.h, line 9
Каждая запись может быть отключена. Не было простого способа выяснить, какой из них соответствует function_A()
, а какой для function_B()
, просто посмотрев - мне пришлось запустить программу с обоими включенными и отключить тот, который мне не был интересен, когда он был первый удар Не очень хороший опыт использования, но не слишком удивительно, учитывая, насколько редкой может быть ситуация.
Если вам нужно делать это более регулярно, Visual C / C ++ должен позволить вам полностью указать точку останова, используя «Оператор контекста» :
{[function],[source],[module] } location
но я не смог понять, как на самом деле использовать этот синтаксис в IDE отладчика. Если у кого-то есть подробности, я буду признателен за комментарий.
WinDBG в Средствах отладки для Windows также поддерживает этот синтаксис (или что-то очень похожее), но я не могу точно проверить, как (или если) он работает в данный момент).