Если вы программируете для определенной платформы (например, x86 или x64) и знаете соглашение о вызовах (например, cdecl), то вы можете получить эту информацию из стека
Скажем, вы хотите проверить объект , который вызвал функцию, поэтому используйте указатель this
, который помещается в стек перед вызовом функции-члена: получите указатель this
и сравните его с объектом, который вы хотите (this_pointer == a
)
Если вы хотите проверить определенную функцию, получите адрес вызывающего абонента из стека и проверьте эту функцию: caller_address == A::call
. Если это виртуальная функция, используйте указатель this
, чтобы получить vtable
.
В зависимости от соглашения о вызовах и порядка помещения переменных в стек, вам может понадобиться сначала проверить размеры входных переменных, чтобы получить необходимую информацию.