Может ли GDB меняться (от JLE до JGE)? - PullRequest
0 голосов
/ 10 апреля 2019

Может ли GDB изменять определенные программные задачи?например, от "jle" (перейти меньше или равно) до "jge" (перейти больше или равно).

от: 0x0000000000400563 <+45>: jle 0x400547 <main+17>

до: 0x0000000000400563 <+45>: jge 0x400547 <main+17>

1 Ответ

0 голосов
/ 10 апреля 2019

Может ли GDB изменять арифметику памяти?

Что такое "арифметика памяти"?

например, от "jle" (переход меньше или равен) до "jge" (переход больше или равен).

Ваш вопрос чрезвычайно неясен. Я думаю вы спрашиваете: могу ли я изменить программу для выполнения JGE вместо текущей JLE инструкции в GDB?

Если это ваш вопрос, ответ - да.

  1. Найти код операции, который в данный момент используется с командой disas/r 0x400563,0x400564.
  2. Измените код операции на JGE с присвоением кода операции инструкции.

Пример:

(gdb) disas/r 0x400496,0x400497
Dump of assembler code from 0x400496 to 0x400497:
   0x0000000000400496 <main(int, char**)+15>:   7e 07   jle    0x40049f <main(int, char**)+24>
End of assembler dump.

Код операции 0x7E. Код операции для JGE: 0x7D ( таблица ).

Давай исправим. Вы можете сделать это для запущенного процесса:

(gdb) start
(gdb) set *(char*)0x400496 = 0x7d
(gdb) disas/r 0x400496,0x400497


Dump of assembler code from 0x400496 to 0x400497:
   0x0000000000400496 <main(int, char**)+15>:   7d 07   jge    0x40049f <main(int, char**)+24>
End of assembler dump.

Или вы можете обновить двоичный файл на диске, но вызывая gdb --write a.out.

...