相關 struct

typedef struct tagMODULEENTRY32 {
  DWORD   dwSize; // struct 大小
  DWORD   th32ModuleID; // 不用,設0
  DWORD   th32ProcessID; // 使用此 module 之 process ID
  DWORD   GlblcntUsage; // 通常 = 0xffff
  DWORD   ProccntUsage; // 與 GlblcntUsage 同
  BYTE    *modBaseAddr;  // 此 module 於 process 之起始位置
  DWORD   modBaseSize; // module 大小, bytes
  HMODULE hModule;   // module's handle
  TCHAR   szModule[MAX_MODULE_NAME32 + 1]; // module 名
  TCHAR   szExePath[MAX_PATH]; // module 全名
} MODULEENTRY32, *PMODULEENTRY32;

原始碼

// ==================================
// filename: ListModules1.cpp
// compiler: vs2008
// author  : EdisonX (Edison.Shih.)
//   
//   **** all rights reserve ****
// ==================================
#include <windows.h>
#include <stdio.h>
#include <TlHelp32.h>

BOOL ListModule(DWORD PID)
{
        DWORD x;
        HANDLE hModules;
        MODULEENTRY32 mEntry;
        hModules = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
        if(hModules==INVALID_HANDLE_VALUE){
                printf("CreateToolhelp32 fail: %d\n", GetLastError());
                return FALSE;
        }
       
        mEntry.dwSize = sizeof(mEntry);
        if(!Module32First(hModules, &mEntry)){
                printf("Module32First fail: %d\n", GetLastError());
                CloseHandle(hModules);
                return FALSE;
        }

        do{
                // ===========================================
                printf("\n===================================\n");
                printf("Module Name:%s\n", mEntry.szModule);
                printf("Full  Path :%s\n", mEntry.szExePath);
                printf("process ID :%lu\n", mEntry.th32ProcessID);
                printf("Modules ID: %lu\n", mEntry.th32ModuleID);
                printf("Module BaseAddr:%08x\n", mEntry.modBaseAddr);
                printf("Moduel Size: %d\n", mEntry.modBaseSize);

/*
                for(x=0; x<mEntry.modBaseSize; x++){
                        printf("%02x ", mEntry.modBaseAddr[x]);
                }
*/

        }while(Module32Next(hModules, &mEntry));
        CloseHandle(hModules);
        return TRUE;
}

int main()
{
        DWORD pid = GetCurrentProcessId();
        ListModule(pid);
        return 0;
}

edisonx 發表在 痞客邦 PIXNET 留言(0) 人氣()