国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++獲取當前進程IAT的方法

2020-01-26 15:13:48
字體:
來源:轉載
供稿:網友

本文實例講述了C++獲取當前進程IAT的方法,分享給大家供大家參考。

具體實現方法如下:

復制代碼 代碼如下:
#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
 HMODULE hModule = ::GetModuleHandleA(NULL);
 IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)hModule;
 IMAGE_OPTIONAL_HEADER* pOpNtHeader = (IMAGE_OPTIONAL_HEADER*)((BYTE*)hModule + pDosHeader->e_lfanew + 24); //這里加24
 IMAGE_IMPORT_DESCRIPTOR* pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)hModule + pOpNtHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

 while (pImportDesc->FirstThunk)
 {
  char* pszDllName = (char*)((BYTE*)hModule + pImportDesc->Name);
  printf("模塊名稱:%s/n", pszDllName);

  DWORD n = 0;
  //一個IMAGE_THUNK_DATA就是一個導入函數
  IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)((BYTE*)hModule + pImportDesc->OriginalFirstThunk);
  while (pThunk->u1.Function)
  {
   //取得函數名稱
   char* pszFuncName = (char*)((BYTE*)hModule+pThunk->u1.AddressOfData+2); //函數名前面有兩個..
   printf("function name:%-25s,  ", pszFuncName);
   //取得函數地址
   PDWORD lpAddr = (DWORD*)((BYTE*)hModule + pImportDesc->FirstThunk) + n; //從第一個函數的地址,以后每次+4字節
   printf("addrss:%X/n", lpAddr);
   n++; //每次增加一個DWORD
   pThunk++;
  }
  printf("/n");
  pImportDesc++;
 }
 return 0;
}

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库伦旗| 定日县| 海城市| 云龙县| 福清市| 昌乐县| 高清| 淮阳县| 曲沃县| 德安县| 银川市| 永清县| 吕梁市| 西畴县| 平顺县| 连江县| 阿克陶县| 濉溪县| 贵州省| 女性| 前郭尔| 七台河市| 佳木斯市| 寻甸| 安阳市| 达日县| 荔浦县| 宁夏| 昌邑市| 肥乡县| 志丹县| 敦化市| 西平县| 南开区| 澜沧| 开平市| 开封县| 凤山市| 冕宁县| 上高县| 安丘市|