GetStackAddress возвращает значение ESP, которое является ссылкой на стек. Стек распределяется по потокам независимо от любых модулей, загруженных в процессе.
Что вам нужно сделать, это извлечь из стека значение обратного адреса, который будет адресом в вызывающем модуле.
Учитывая, что обычный префиксный код в функции:
push ebp
mov ebp,esp
sub esp, bytes_of_local_variables
esp будет несколько случайным, но [ebp] должен указывать на предыдущий ebp, а [ebp + 4] должен указывать на адрес возврата текущего кадра.
Итак, вы можете попробовать это:
__declspec(naked) void *GetReturnAddressAssumingStandardFramePointers()
{
__asm
{
mov eax, [ebp+4]
ret
}
}
Просто убедитесь, что функции, которые вызывают, которые не скомпилированы с / Oy