Как запустить сборку в GDB напрямую? - PullRequest
6 голосов
/ 14 апреля 2011

Я могу использовать call для запуска функций c, но как запустить сборку или даже шелл-код напрямую?

Ответы [ 2 ]

7 голосов
/ 14 апреля 2011

Чтобы выполнить код оболочки, вы можете редактировать содержимое функции напрямую:

(gdb) b foo
Breakpoint 1 at 0x400608
(gdb) run
Breakpoint 1, 0x0000000000400608 in foo ()
(gdb) x/16bx foo
0x400604 <foo>:        0x55    0x48    0x89    0xe5    0x53    0x48    0x81   0xec
(gdb) set ((unsigned char *)foo)[6] = 0x85
(gdb) x/16bx foo
0x400604 <foo>:        0x55    0x48    0x89    0xe5    0x53    0x48    0x85   0xec
(gdb) cont

Я не знаю, как выполнять коды операций из gdb, но вы, безусловно, можете делать с регистрами все что угодно,Например, вместо mov %rbx, %rax вы можете использовать set $rax = $rbx:

(gdb) p $rax
$1 = 3671197290184
(gdb) set $rax = $rbx
(gdb) p $rax
$2 = 0
(gdb)
0 голосов
/ 14 апреля 2011

Я не думаю, что в gdb есть ассемблер, поэтому я не ожидал, что смогу войти в сборку напрямую.

Вы можете использовать команду <a href="http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_10.html" rel="nofollow">shell</a> gdb для запуска команд оболочки:

(gdb) shell uname -m
x86_64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...