windows GetModuleHandleW / A -不工作,除空字符串外,每次调用都返回null

plupiseo  于 2022-11-18  发布在  Windows
关注(0)|答案(1)|浏览(210)
#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。我的目标是打印某个正在运行的进程- GetModuleHandleA / W的每个dll和它的所有导入函数。每个调用都返回null -打印“Error”,正如我检查的那样,不包括由于某种原因打印“0”的空调用。

92dk7w1h

92dk7w1h1#

除了明显的(LPCWSTR)prog转换bug之外,GetModuleHandle永远不会工作,因为它只处理当前进程中的模块。
调用CreateToolhelp32Snapshot以获取所有进程的列表,然后再次调用CreateToolhelp32Snapshot以获取特定进程的模块。注意,您不能直接读取远程进程的DOS/NT头文件,您必须使用ReadProcessMemory
DataDirectory是一个数组,您必须指定您感兴趣的目录(资源、导入、导出等)。

相关问题