Передача аргумента структуры в CreateThread () и отсутствие получения переменной char *

Я рефлекторно внедряю dll в память других процессов, и мне нужно явно вызвать CreateThread (). Я передаю определенные параметры в DLL, которую я внедряю, используя мою структуру loader_data. У меня есть определенные переменные, которые мне нужно передать, такие как размеры порции памяти и т. Д. Все они успешно доставляются в мою введенную dll, однако при передаче char * в мою структуру она оказывается пустой для моей введенной dll в зарезервированной параметр DllMain.

loader_data_t *parameter = new loader_data_t();
... initialize variables.

lpRemoteLibraryBuffer3 = VirtualAllocEx(proc, NULL, sizeof(loader_data_t), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

WriteProcessMemory(proc, lpRemoteLibraryBuffer3, parameter, sizeof(loader_data_t), NULL);

Вот как я выделяю место для параметра.

typedef struct loader_data_t {
char *chunk;
int chunk_size;
ULONG_PTR reloc_address;
};

И это структура, которую я передаю. Я определенно инициализирую его правильно, я проверил, чтобы убедиться, что все настроено правильно. Однако когда он передается зарезервированному параметру в DllMain, все остальные переменные верны, кроме переменной char * chunk. Я действительно запутался, извините за возможно смутное название.

-1

Решение

Предполагая, что вы установили ‘chunk’ в коде данных инициализации, указатель в удаленном адресном пространстве будет ссылаться на адрес в локальном процессе.

Самый простой способ обойти это — сделать массив массивом (возможно, последним членом структуры) и выделить блок, достаточно большой для хранения данных блока.

Более сложным было бы выделить второй блок в удаленном процессе для данных чанка, скопировать данные в этот блок, записать этот адрес в член чанка локального экземпляра и только затем записать локальную структуру в удаленный процесс.

2

Другие решения

Других решений пока нет …