Нахождение правильного базового адреса

Я понял, что моя версия получения правильного 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);

Здесь я сделал изображение моего рабочего стола. Я очень запутался, может кто-то знает, где я допустил ошибку.

1 ответ

Решение

Если вы хотите то, что я думаю, вы хотите, я могу придумать лишь несколько способов сделать это, хотя ни один из них не является встроенным.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)
    
Другие вопросы по тегам