Адрес dll библиотеки

Начинающий
Статус
Оффлайн
Регистрация
24 Янв 2019
Сообщения
12
Реакции[?]
0
Поинты[?]
0
Пишу программку на с++. Ищу адрес динамической библиотеки, чтобы позже писать в память. Как я понимаю, "mono-2.0-bdwgc.dll при каждом перезапуске игры меняется. Подскажите пожалуйста, как получать этот адрес. Пробовал через GetModuleHandle, CreateToolhelp32Snapshot, каждый раз возвращало 0.1627577255177.png
 
Участник
Статус
Оффлайн
Регистрация
6 Сен 2020
Сообщения
749
Реакции[?]
364
Поинты[?]
8K
Если тут чел не будет понятно рассказывать (А я видео даже не смотрел) то просто поищи как найти статичные адреса cheat engine
 
Начинающий
Статус
Оффлайн
Регистрация
24 Янв 2019
Сообщения
12
Реакции[?]
0
Поинты[?]
0
Скинь полный код, как ты это пробовал делать
#include <iostream>
#include <vector>
#include <Windows.h>
#include <TlHelp32.h>


using namespace std;

DWORD BaseAddress = 0;
DWORD pID = 0;
DWORD value = 0x00496D88;
int getvalue = 0;
LPCSTR dllName = "mono-2.0-bdwgc.dll";
float value1 = 0;
int main()
{
HWND hwnd = FindWindow(0, "Muck");
if (hwnd == 0)
{
cout << "Cannot find Muck" << endl;
return 0;
}
else
{
GetWindowThreadProcessId(hwnd, &pID);
if (pID != 0)
{
HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
HANDLE dllphnale;
if (phandle != INVALID_HANDLE_VALUE)
{
dllphnale = GetModuleHandleA(dllName);
cout << GetLastError() << endl;
cout << "Everething is work" << endl;
cout << "hwnd = " << hwnd << endl;
cout << "pID = " << pID << endl;
cout << "phandle = " << phandle << endl;
cout << "dllphnale = " << dllphnale << endl;
}
}
}
return 0;
}

Вот код, написал просто для визуализации и проверки работоспособности
Если тут чел не будет понятно рассказывать (А я видео даже не смотрел) то просто поищи как найти статичные адреса cheat engine
Ты совсем то скинул. Статический адрес с оффсетами есть. Необходимо лишь читать адрес exe или dll (в моем случае dll), чтобы получить BaseAddress.
 
Пользователь
Статус
Оффлайн
Регистрация
11 Июн 2020
Сообщения
177
Реакции[?]
82
Поинты[?]
0
Можешь посмотреть видео на gh (noad) про динамическое выделение памяти
а так, можно без особых проблем найти базовый адрес модуля с помощью TLHelp32.h

C++:
uintptr_t GetModuleBaseAddress(DWORD ProcID, const char* ModuleName)
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, ProcID); 
// Берем снепшот всех модулей в процессе игры

    if (hSnap == INVALID_HANDLE_VALUE)
    {
        return NULL;
    }

    MODULEENTRY32 ModuleEntry;
    ModuleEntry.dwSize = sizeof(ModuleEntry);

    if (!Module32First(hSnap, &ModuleEntry))
    {
        CloseHandle(hSnap);
        return NULL;
    }

    do {
        if (!strcmp(ModuleEntry.szModule, ModuleName)) {
            CloseHandle(hSnap);
            return (uintptr_t)ModuleEntry.modBaseAddr;
        }
    } while (Module32Next(hSnap, &ModuleEntry));
// Грубо перебираем все модули, пока не найдем подходящий по имени.
// Далее возвращаем его базовый адрес
    return NULL;
}
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
Эта функция ищет адрес библиотеки в твоём процессе.
"Retrieves a module handle for the specified module. The module must have been loaded by the calling process."
Документация же есть.
Выше скинули похожее на рабочий вариант.
 
Сверху Снизу