Я играю с некоторыми исправлениями функций времени выполнения, но у меня проблема с порядком байтов при записи значений адресов памяти.Итак, что у меня есть:
char buf[] = \xE9\xDE\xAD\xBE\xEF
Во время выполнения я должен исправить 0xDEADBEEF, чтобы он указывал на фактический адрес - вот моя функция, чтобы сделать это:
void FixJMPAddress(BYTE *jump, BYTE *newRoutine) {
DWORD address;
DWORD *dwPtr;
address = (DWORD)newRoutine;
dwPtr = (DWORD *)&(jump[1]);
*dwPtr = address;
}
Он вызывается какчто:
FixJMPAddress(buf, &Something);
К сожалению, при разборке конечного результата я получаю:
E9 60 DA 47 93
вместо
E9 93 47 DA 60
Так что это связано с тем, что x86little-endian, но есть ли способ, с помощью которого я могу справиться автоматически, без необходимости писать функцию, которая, по сути, обращает всплывающее окно ввода?