2014-10-11 133 views
-1

不好意思問這個愚蠢的問題,但我試圖獲得在遠程進程中運行的lib的地址(指針)。intptr的指針地址

該地址保存在類型intptr但是當我打印的價值,我得到一個巨大的int。

我如何將它轉換爲0x00000等?

示例代碼:

public uint GetModuleBase(string _moduleName) 
    { 
     MODULEENTRY32 me32 = new MODULEENTRY32(); 
     IntPtr hSnapshot = IntPtr.Zero; 

     me32.dwSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(me32); 
     hSnapshot = CreateToolhelp32Snapshot(0x00000008, this.processId); 

     // can we start looking? 
     if (!Module32First(hSnapshot, ref me32)) 
     { 
      CloseHandle(hSnapshot); 
      return 0; 
     } 

     // enumerate all modules till we find the one we are looking for 
     // or until every one of them is checked 
     while (String.Compare(me32.szModule, _moduleName) != 0 && Module32Next(hSnapshot, ref me32)) 
     { 
      modules.Add(me32.szModule, me32.modBaseAddr); 
     } 

     // close the handle 
     CloseHandle(hSnapshot); 

     // check if module handle was found and return it 
     if (String.Compare(me32.szModule, _moduleName) == 0) 
     { 
      return (uint)me32.modBaseAddr; 
     } 
     return 0; 
    } 

過程黑客表明LIB是在地址(0x6f300000)加載,但我得到一個int值(1865416704)當我嘗試打印IntPtr的值。

+0

http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx - 嘗試'x8' – 2014-10-11 13:18:52

回答

2

您可以通過使用ToString()和前綴的0x部分你這樣的整數轉換爲0x00000000格式(這僅僅是一個hexadecimal表示):

int yourNumber = 1234567890; 
string hexNumber = string.Format("0x{0:X}", yourNumber); 

然而,有沒有真正需要做到這一點,因爲它是基本上只是一種顯示格式。

+0

那麼我有另一個問題。我可以看到lib被加載到地址(0x6f300000)上,但是當我嘗試獲取地址時,我得到:1865416704,並將0x放在前面並不會使它相同。 – 2014-10-11 00:28:50

+1

1865416704是一樣的0x6f300000 – DavidG 2014-10-11 00:37:25

+0

你們但我怎麼會知道呢? :)我怎樣才能打印值,所以它顯示0x6f300000?在此先感謝 – 2014-10-11 00:38:59