2011-11-24 18 views
7

ho capito che la mia versione di ottenere il corretto baseaddress era sbagliatoTrovare la giusta baseaddress

Process[] iexp = Process.GetProcessesByName("Solitaire"); 
if (iexp.Length == 0) { 
    //EXIT 
} 
Process internet = iexp[0]; 
uint baseAddress = (uint)internet.MainModule.BaseAddress.ToInt64(); 

ma il baseaddress è sbagliato

Ho anche guardato in MSDN ma this codice è molto strano e mi ha un dà ciclo infinito.

Spero che tu possa aiutarmi perché non riesco a trovare alcun esempio.

EDIT:

ReadProcessMemory(readHandle, ((IntPtr)(((baseAddress) + 0x14) + 0x50)), bytes, (UIntPtr)4, ref rw); 

Qui ho fatto un'immagine del mio desktop. Sono davvero confuso, forse qualcuno sa dove ho fatto un errore. http://i.stack.imgur.com/50lva.jpg

+4

Come fai a sapere questo è il ritorno l'indirizzo di base sbagliato? Il codice che hai collegato sembra ragionevole per me ... –

risposta

2

Se si desidera quello che penso che vuoi, posso solo pensare a un paio di modi per farlo, nessuno di loro è NET built-in se ...

  1. Utilizzare P/Invoke per restituire l'indirizzo di base dell'eseguibile di avvio.

    [DllImport("kernel32.dll")] 
    public static extern IntPtr GetModuleHandle(string lpModuleName); 
    
  2. restituisce l'indirizzo di base del file eseguibile contenente MyClass

    Marshal.GetHINSTANCE(typeof(MyClass).Module) 
    
  3. Ritorna un handle per il modulo corrente utilizzando:

    Marshal.GetHINSTANCE(this.GetType().Module) 
    
Problemi correlati