Оказывается, есть такой простой и доступный ms-specific способ для получения адреса инструкции, которая будет выполнятся после возврата из функции:
extern "C" void * _ReturnAddress(); void fnc() { void * pCaller = _ReturnAddress(); }
|
Полезная вещь. Хороша тем, что освобождает от необходимости писать naked-стабы на асме в тривиальных случаях, например, если вдруг захочется подменить менеджер памяти:
void * DbgAllocatePool(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes) { void * pData = ExAllocatePool(PoolType, NumberOfBytes); if (pData) RegisterAllocation(PoolType, NumberOfBytes, pData, _ReturnAddress()); return pData; }
|
_Winnie C++ Colorizer |
No comments:
Post a Comment