2 внедренные библиотеки DLL, показывающие разные значения в памятиC++

Программы на C++. Форум разработчиков
Anonymous
2 внедренные библиотеки DLL, показывающие разные значения в памяти

Сообщение Anonymous »

Итак, у меня есть две разные библиотеки DLL, которые я добавляю в приложение. Я пытаюсь перенести dll, написанную кем-то другим, с ржавчины на С++. Когда я ввожу их обоих, я читаю разные значения из памяти в каждом. хотя я получаю тот же базовый адрес. в Rust для получения базового адреса используется пакет toy_arms, а в моем порту C++ я использую:

Код: Выделить всё

GetModuleHandle(L"ProgramName")
Я получаю доступ к данным из памяти в Rust следующим образом:

Код: Выделить всё

*((module_base_address + GNAMES_OFFSET) as *mut usize))
и вот так в c++:

Код: Выделить всё

*(unsigned long long *)(module_base_address + GNAMES_OFFSET)
однако я всегда получаю 0 для строки C++, а для кода Rust это значение варьируется (примеры: 1974523893904, 2751407560848). Разработчик кода ржавчины также использовал эту строку для настройки точки входа, если это имеет значение:

Код: Выделить всё

internal::create_entrypoint!(main_thread);
который является частью пакета toy_arms, а я просто использую:

Код: Выделить всё

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD  ul_reason_for_call,
LPVOID lpReserved
)
точка входа. Я написал тестовую программу с использованием LoadLibraryA для созданной мною dll и смог вызвать исполняемый файл в программе, загружающей dll, вот так:

Код: Выделить всё

typedef int(__stdcall* printStringFunc)(const char *);
printStringFunc myPrintString = (printStringFunc)(baseAddress + 0x12330);
поэтому я знаю, что это возможно. Есть идеи, что происходит?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-memory

Вернуться в «C++»