程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++獲得以後過程IAT的辦法

C++獲得以後過程IAT的辦法

編輯:關於C++

C++獲得以後過程IAT的辦法。本站提示廣大學習愛好者:(C++獲得以後過程IAT的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C++獲得以後過程IAT的辦法正文


本文實例講述了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++法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved