无聊写了下
有Bug 注意下就好啦~
#include "GetUndocumentFunctionAdress.h"
#pragma warning(disable : 4047)
PVOID GetCallPoint(PVOID pCallPoint)
{
ULONG dwOffset = 0;
ULONG_PTR returnAddress = 0;
LARGE_INTEGER returnAddressTemp = { 0 };
PUCHAR pFunAddress = NULL;
if (pCallPoint == NULL || !MmIsAddressValid(pCallPoint))
return NULL;
pFunAddress = pCallPoint;
// 函数偏移
RtlCopyMemory(&dwOffset, (PVOID)(pFunAddress + 1), sizeof(ULONG));
// JMP向上跳转
if ((dwOffset & 0x10000000) == 0x10000000)
{
dwOffset = dwOffset + 5 + pFunAddress;
returnAddressTemp.QuadPart = (ULONG_PTR)pFunAddress & 0xFFFFFFFF00000000;
returnAddressTemp.LowPart = dwOffset;
returnAddress = returnAddressTemp.QuadPart;
return (PVOID)returnAddress;
}
returnAddress = (ULONG_PTR)dwOffset + 5