Cheat engine выдает другой базовый адрес в отличие от Module.BaseAddress
Process proc = Process.GetProcessesByName(name)[0];
foreach (ProcessModule module in proc.Modules)
{
if (module.ModuleName == "server.dll")
{
int i = (int)module.BaseAddress;
Console.WriteLine("Name: " + module.ModuleName + " BaseAddress: " + Convert.ToString(i, 16));
BaseAdd = (int)module.BaseAddress; // эта функция берет базовый адрес модуля(536d0000)
}
}
С помощью этого кода я получаю базовый адрес модуля, но он отличается от "server.dll" в cheat engine. Также я заметил, что я получаю адрес, который находится в "редактор памяти -> просмотр -> список загруженных dll и символов."
Я хочу получить адрес "server.dll" в окошке ниже (он равен: 35F1878C). К "server.dll" прибавляем 009858DC
Ответы (1 шт):
Автор решения: Даниил Ганин
→ Ссылка
У меня получилось решить эту проблему. Для это нужно установить библиотеку VAMemory(https://vivid-abstractions.net/logical/programming/vamemory-c-memory-class-net-3-5/). Подключаем её и инициализируем
VAMemory vam = new VAMemory("hl2"); // "hl2" вместо этого нужно вписать название процесса к которому подключаемся.
{
Process proc = Process.GetProcessesByName(name)[0];
int ID = proc.Id;
IntPtr handle = OpenProcess(0x001F0FFF, false,ID);
foreach (ProcessModule module in proc.Modules)
{
if (module.ModuleName == "server.dll" || module.ModuleName == "hl2.exe")
{
BaseAdd = vam.ReadInt32((IntPtr)(module.BaseAddress + 0x009858DC)); // вот самый нужный метод. 0x009858DC это смещение, которое было выше. Каким-то магическим образом оно находит нужный адрес, который находит CE(последняя картина). Не знаю как оно работает, но оно работает!
Console.WriteLine("Name: " + module.ModuleName + " BaseAddress: " + Convert.ToString(BaseAdd, 16));
}
}
}

