2012-03-22 3 views
-1

私はC#で私にできることを知っている:C++ BASEADDRESS、エントリポイントアドレス

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] = '\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; 
      } 
     } 
    } 
} 
+0

あなたの質問は何ですか?明らかに必要なものを実行するコードがあります。 MSDNのサンプルには、必要なものがすべて含まれています。http://msdn.microsoft.com/en-us/library/windows/desktop/ms682621(v=vs.85).aspx –

答えて

関連する問題