Итак, я пытаюсь внедрить отладочную dll в свой тестовый процесс, который просто говорит «привет, мир» после успешного внедрения:
PS: Я использую C ++ / CLI для запуска моего сценария C ++ из интерфейс.
hello.dll
// dllmain.cpp : Defines the entry point for the DLL application.
#include "pch.h"
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD reason,
LPVOID lpReserved
)
{
if (reason == DLL_PROCESS_ATTACH)
MessageBox(NULL, L"HELLO WORLD", L"INFO", NULL);
return TRUE;
}
Ниже приведена часть моего кода, которая принимает эту dll, выделяет память в целевом процессе, записывает путь к dll последнему отведено место. Затем вызывается LoadLibraryA
для запуска DLL из пути. Однако, когда я присоединяю свой отладчик vstudio к целевому процессу при внедрении библиотеки DLL, он вылетает при выполнении функции LoadLibraryA
с ошибкой:
ntldll.dll rangechecks out of range access
PSS: стек вызовов просто содержит функции ntdll.dll
Код внедрения :
char* dll_path = "C:/some_path/hello.dll";
HANDLE h_process = OpenProcess(PROCESS_ALL_ACCESS, NULL, debug_app_id);
HANDLE allocatedMemory = VirtualAllocEx(h_process, 0, MAX_PATH, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(h_process, allocatedMemory, dll_path, strlen(dll_path) + 1, nullptr);
HANDLE h_thread = CreateRemoteThread(h_process, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, allocatedMemory, 0, 0);//crashes here
cout << "Success!" << endl;
cout << endl;
cout << "Cleaning..." << endl;
CloseHandle(h_process);//dropping process handle
VirtualFreeEx(h_process, allocatedMemory, NULL, MEM_RELEASE);//release pointed to memory
Есть идеи?
ИЗМЕНИТЬ : когда я пытаюсь выделить память, я получаю System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt
Заранее спасибо.