Нахождение правильного базового адреса
Я понял, что моя версия получения правильного 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...
Используйте P/Invoke, чтобы вернуть базовый адрес исполняемого файла запуска.
[DllImport("kernel32.dll")] public static extern IntPtr GetModuleHandle(string lpModuleName);
Возвращает базовый адрес исполняемого файла, содержащего MyClass
Marshal.GetHINSTANCE(typeof(MyClass).Module)
Вернуть дескриптор текущего модуля, используя:
Marshal.GetHINSTANCE(this.GetType().Module)