C语言 GetModuleHandleW / A -不工作.每次调用返回null,不包括空字符串 &


#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'的空调用。

除了明显的(LPCWSTR)prog类型转换错误,GetModuleHandle永远不会工作,因为它只处理当前进程中的模块。

调用CreateToolhelp32Snapshot获取所有进程的列表,然后再次调用CreateToolhelp32Snapshot获取特定进程的模块。请注意,您不能直接读取远程进程的DOS/NT头文件,您必须使用ReadProcessMemory

DataDirectory是一个数组,您必须指定您感兴趣的目录(资源,导入,导出等)。

最新更新