C++BaseAddress和入口点地址

C++ BaseAddress and entry point address

本文关键字:地址 入口 C++BaseAddress      更新时间:2023-10-16

我知道在c#中我可以做:

Process currentProcess  = System.Diagnostics.Process.GetCurrentProcess();
currentProcess.Modules[0].BaseAddress
currentProcess.Modules[0].EntryPointAddress

我将如何在C++中获得这些信息?

看一看我有:

void
get_module_name_for_address(LPVOID address,
                            TCHAR *buf, int buf_size)
{
    HANDLE process;
    HMODULE modules[256];
    DWORD bytes_needed, num_modules;
    unsigned int i;
    buf[0] = '';
    process = GetCurrentProcess();
    if (EnumProcessModules(process, (HMODULE *) &modules,
                           sizeof(modules), &bytes_needed) == 0)
    {
        return;
    }
    if (bytes_needed > sizeof(modules))
        bytes_needed = sizeof(modules);
    num_modules = bytes_needed / sizeof(HMODULE);
    for (i = 0; i < num_modules; i++)
    {
        MODULEINFO mi;
        if (GetModuleInformation(process, modules[i], &mi, sizeof(mi)) != 0)
        {
            LPVOID start, end;
            start = mi.lpBaseOfDll;
            end = (char *) start + mi.SizeOfImage;
            if (address >= start && address <= end)
            {
                GetModuleBaseName(process, modules[i], buf, buf_size);
                return;
            }
        }
    }
}
非托管代码中的GetModuleInformation():http://msdn.microsoft.com/en-us/library/ms683201%28v=VS.85%29.aspx