изменение мнемонических изменений адреса - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в GDB и сборке.Я пытаюсь изменить мнемоническую инструкцию с jg на jle, но всякий раз, когда я изменяю мнемонику, она также меняет адрес назначения.Например,

Допустим, я пытаюсь изменить это:

4005a5 0f 8f 1e 01 00 00 jg 400c74 <Function_1>

Итак, я сделал

$set *0x4005a5 = 0x7e

Затем, что происходит, это меняет400c74 на случайный адрес, например 400ae4.Я подумал, что это может быть проблема короткого прыжка и ближнего прыжка, поэтому я даже сделал = 0x0f8e = 0x74400c7e = 0x0f8e400c74 и т. Д.

Но все они меняют прыжок на локацию ..

Может кто-нибудь объяснить, почему это происходит, пожалуйста?

1 Ответ

0 голосов
/ 18 сентября 2018

set *(unsigned short*)0x4005a5 = 0x8e0f


2 проблемы, я думаю:

  • set *0x4005a5 = 0x7e вероятно, по умолчанию используется хранилище мечей, записывающее 4 байта вместо 1.
  • И вы неправильно указали код операции двумя разными способами: короткая и ближняя, а затем проблема с порядком байтов для ближней.

Да, в оригинальной инструкции используется кодировка Near (jcc rel32) , где код операции равен 2 байта 0f 8f. Вы можете сказать, потому что полная инструкция имеет длину 6 байтов вместо 2 и начинается с 0f (так что это не однобайтовый код операции.)

Вы заменяете его однобайтовым Short jle rel8, поэтому второй байт кода операции становится rel8.

(Оригинальный 8086 имеет только jcc rel8 для условных переходов, только с безусловными переходами, такими как jmp, с кодировкой rel8 и rel16; где-то между 186 и 386 было добавлено кодирование jcc rel16/rel32.)


Ваша попытка установить 0x0f8e имеет проблему с порядком байтов. x86 является прямым порядком байтов, поэтому опкод jle 0F 8E как порядковый номер unsigned short имеет значение 0x8e0f.

8E - это код операции для mov Sreg, r/m16, поэтому 0x0f8e (8E 0F) будет декодироваться как mov к сегменту reg, с 0F в качестве байта ModR / M. Используйте GDB, чтобы разобрать инструкцию после ее изменения.

Используйте GDB's disas /r для разборки с необработанным гексом и мнемоникой.

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