Как изменить 6-байтовый адрес памяти из je в jne - PullRequest
0 голосов
/ 13 марта 2012

я играю на ассемблере и gdb пытается изменить адрес памяти:

+ 67 00058093 0f84e8000000 je 0x00058181

id хотел бы изменить второй байт, который читает 84-85, чтобы инструкция стала jne. Затем я делаю следующее в GDB после взлома кода:

set {char}0x00058094=85

но вместо jne я получаю следующее "andnps% xmm0,% xmm5":

(gdb)disas
0x00058093 <-[SWBConditionalImplementations checkRegistration:preferences:callbacks:]+67>:  andnps %xmm0,%xmm5

Спасибо за любую помощь!

1 Ответ

5 голосов
/ 13 марта 2012

Ваша проблема в том, что вы передаете десятичное значение, а не шестнадцатеричное, вы должны использовать set {char}0x00058094=0x85 или set {char}0x00058094=133, чтобы сделать то, что вы хотели, в противном случае set *((char*)0x00058094) = 0x85 также будет работать.

разборкаделает это немного яснее:

0F55E8                             ANDNPS XMM5,XMM0

против

0F85 E8000000                      JNZ 004010F1

85 - 0x55, поэтому вы получаете инструкцию SIMD, а не тот JNE, который вы хотели.

(Я немного разочарован, что не заметил этого раньше ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...