hook 虚表

PVOID* GetVtpl(PVOID lpThis, int nIndex)
{
  return *(PVOID**)lpThis + nIndex;
}

PVOID HookVtpl(PVOID* lpAddr, PVOID lpNewAddr)
{
  DWORD dwOldProtect;
  PVOID lpResult = NULL;
  
  if ( VirtualProtect(lpAddr, sizeof (PVOID), PAGE_READWRITE, &dwOldProtect) )
  {
    lpResult = *lpAddr;
    *lpAddr = lpNewAddr;
    
    VirtualProtect(lpAddr, sizeof (PVOID), dwOldProtect, &dwOldProtect);
  }
  
  return lpResult;
}

void UnhookVtpl(PVOID* lpAddr, PVOID lpOldAddr)
{
  HookVtpl(lpAddr, lpOldAddr);
}

posted @ 2013-07-24 13:25  Red Cat  阅读(521)  评论(0编辑  收藏  举报

Copyright © 2022 LyShark Powered by .NET 6 on Kubernetes
Theme - LyTheme 1.0