Тема: L2 PTS
Показать сообщение отдельно
Непрочитано 22.08.2016, 10:09   #21
Пользователь

По умолчанию Re: L2 PTS

Удивительно как можно совершить столько ошибок в паре строчек кода
tramp = new unsigned char[6];
Code: C++
Memory leak без delete[] в конце. Лучше сразу на стеке объявить char tramp[6];
tramp[1] = (char)pNewFunc;
Code: C++
Это копирует только один младший байт адреса.
WriteMemory(pAddress, &tramp, sizeof(tramp));
Code: C++
Cразу две ошибки. У тебя tramp - это указатель, следовательно &tramp - адрес этой переременной, а не самого буфера с кодом; по той же причине sizeof(tramp) будет == 4, а не 6.

 
char trampoline[6];
trampoline[0] = 0x68; // push imm32
memcpy(&trampoline[1], pNewFunc, 4); // тут я не понял. pNewFunc у тебя это уже адрес новой функции или это указатель на переменную с адресом новой функции?
trampoline[5] = 0xС3; // ret
WriteMemory(pAddress, trampoline, sizeof(trampoline));
 
Code: C++
Ugly вне форума Ответить с цитированием
Сказали спасибо: