#include <Windows.h>
int main(){
printf("Enter name of program. \n");
char prog[300];
scanf("%s", prog);
HMODULE hModule = GetModuleHandleW((LPCWSTR)prog);
if (hModule){
IMAGE_DOS_HEADER* pIDH = (IMAGE_DOS_HEADER*)hModule;
IMAGE_NT_HEADERS* pNTH =(IMAGE_NT_HEADERS*)((BYTE*)pIDH pIDH->e_lfanew);
IMAGE_OPTIONAL_HEADER pOPH = (IMAGE_OPTIONAL_HEADER)pNTH->OptionalHeader;
IMAGE_DATA_DIRECTORY* pIDD = (IMAGE_DATA_DIRECTORY*)pOPH.DataDirectory;
printf("%x", pIDD->VirtualAddress);
}
else {
printf("Error");
}
return 0;
}
這是我現在的基本腳本,只是為了檢查我是否進入 IMAGE_DATA_DIRECTORY。我的目標是列印某個正在運行的行程的每個 dll 及其所有匯入函式 - GetModuleHandleA / W。每次呼叫其回傳 null - 在我檢查時列印“錯誤”,不包括它為某些列印“0”的空呼叫原因..
uj5u.com熱心網友回復:
除了明顯的(LPCWSTR)prog轉換錯誤之外,GetModuleHandle它永遠不會起作用,因為它只處理當前行程中的模塊。
呼叫CreateToolhelp32Snapshot以獲取所有行程的串列,然后CreateToolhelp32Snapshot再次呼叫以獲取特定行程的模塊。請注意,您不能直接讀取遠程行程的 DOS/NT 標頭,您必須使用ReadProcessMemory.
DataDirectory是一個陣列,你必須指定你感興趣的目錄(資源、匯入、匯出等)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528418.html
