WriteProcessMemory был выполнен только частично (ошибка 299)
От: mihart  
Дата: 08.01.15 14:42
Оценка:
Добрый день!
Я пишу Dll, которую подключает приложение, к которому у меня нет исходного кода.
Мне нужно чтобы при загрузке dll изменялась как память самого приложения (приложение предоставляет право модифицировать код), так и память загружаемой DLL.
С изменением памяти приложения проблем нет, модифицируется отлично!

Проблема с тем, что я никак не могу модифицировать память самой библиотеки.
Вот мой код:

int test() {return 0;}

void change() {

    DWORD oldProtect = 0;
    HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
    int result = VirtualProtectEx(pHandle,(int*)(test), 256, PAGE_EXECUTE_READWRITE, &oldProtect);
    result = WriteProcessMemory(pHandle, (LPVOID)(test), (LPVOID)0xC3, sizeof(unsigned char), NULL);
    result = GetLastError();
}


Что я делаю неправильно?
Мне нужно переписать код по адресу, в котором находится функция test(). Как правильно модифицировать память процесса?
Зачем это нужно описано здесь:
Re: WriteProcessMemory был выполнен только частично (ошибка 299)
От: VladFein США  
Дата: 08.01.15 15:19
Оценка:
Здравствуйте, mihart, Вы писали:

M>
M>    result = WriteProcessMemory(pHandle, (LPVOID)(test), (LPVOID)0xC3, sizeof(unsigned char), NULL);
M>


M>Что я делаю неправильно?


Копируете из адреса (LPVOID)0xC3?
Re[2]: WriteProcessMemory был выполнен только частично (ошибка 299)
От: mihart  
Дата: 08.01.15 16:01
Оценка: :)
VF>Копируете из адреса (LPVOID)0xC3?

Боже, даже стыдно.
Вы правы, спасибо, поправил, все заработало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.