Нахождение правильного базового адреса - PullRequest
7 голосов
/ 25 ноября 2011

Я понял, что моя версия получения правильного baseaddress была неправильной

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

но baseaddress не так

Я также посмотрел в MSDN , но этот код очень странный и дает мне бесконечный цикл.

Надеюсь, вы мне поможете, потому что я не могу найти ни одного примера.

РЕДАКТИРОВАТЬ:

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

Здесь я сделал изображение моего рабочего стола. Я очень запутался, может кто-то знает, где я допустил ошибку. http://i.stack.imgur.com/50lva.jpg

1 Ответ

2 голосов
/ 30 ноября 2011

Если вы хотите то, что я думаю, вы хотите, я могу придумать только несколько способов сделать это, хотя ни один из них не является встроенным .NET ...

  1. ИспользованиеP / Invoke для возврата базового адреса исполняемого файла запуска.

    [DllImport("kernel32.dll")]
    public static extern IntPtr GetModuleHandle(string lpModuleName);
    
  2. Возвращает базовый адрес исполняемого файла, содержащего MyClass

    Marshal.GetHINSTANCE(typeof(MyClass).Module)
    
  3. Возвращает дескриптор текущего модуля, используя:

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