2011-11-24 6 views
7

me di cuenta de que mi versión de conseguir la correcta baseaddress estaba malEncontrar el baseaddress correcta

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

pero el baseaddress está mal

También busqué en MSDN pero this código es muy extraño y me la da Bucle infinito.

Espero que me pueda ayudar porque no puedo encontrar ningún ejemplo.

EDIT:

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

Aquí hice una imagen de mi escritorio. Estoy realmente confundido, tal vez alguien sabe dónde cometí un error. http://i.stack.imgur.com/50lva.jpg

+4

¿Cómo se sabe que esto es volver la dirección base incorrecta? Ese código que vinculó me parece razonable ... –

Respuesta

2

Si usted quiere lo que creo que quieres, sólo puedo pensar en algunas maneras de hacerlo, ninguno de ellos es .NET incorporada aunque ...

  1. Use P/Invoke para devolver la dirección base del ejecutable de inicio.

    [DllImport("kernel32.dll")] 
    public static extern IntPtr GetModuleHandle(string lpModuleName); 
    
  2. Devuelve la dirección base del ejecutable que contiene MiClase

    Marshal.GetHINSTANCE(typeof(MyClass).Module) 
    
  3. devolver un identificador para el módulo actual usando:

    Marshal.GetHINSTANCE(this.GetType().Module) 
    
Cuestiones relacionadas