Если вы знаете адрес места расположения кода, откуда вызывается функция, вы можете сделать условие точки останова зависимым от адреса возврата, хранящегося в стеке вызовов .
Следовательно, Вы должны быть в состоянии установить точку останова как условие значения *(DWORD*)ESP
(32-битный код) или *(QWORD*)RSP
(64-битный код). Хотя я не проверял это.
Однако мой приведенный выше пример будет работать только в том случае, если точка останова установлена в самом начале функции, до того, как вызываемая функция помещает какие-либо значения в стек или изменяет указатель стека. , Я не уверен, где Visual Studio устанавливает точку останова, если вы помещаете ее в первую инструкцию функции. Поэтому вам может потребоваться либо установить точку останова в окне разборки для первой инструкции ассемблера функции, либо вам может потребоваться компенсировать функцию, изменив указатель стека в прологе функции .
В качестве альтернативы, если правильный стековый фрейм был настроен с использованием регистра EBP (или RBP для 64-битного), то вы можете использовать его вместо этого.
Обратите внимание, что не адрес инструкции CALL будет помещен в стек, а точнее адрес возврата, который является адресом следующей инструкции уровня ассемблера вызывающей функции.
Я предлагаю вам сначала установить безусловную точку останова, где Вы хотите его и затем осмотрите стек, используя средство просмотра памяти в отладчике, в частности, чтобы увидеть, куда указывают значения ESP / RSP и EBP / RBP и где адрес возврата хранится в стеке.