如何直接在gdb中运行程序集?

时间:2011-04-14 09:22:37

标签: assembly gdb

我可以使用call来运行c函数,但是如何直接运行程序集甚至shell代码?

2 个答案:

答案 0 :(得分:7)

要执行shell代码,您可以直接编辑函数的内容:

(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)

答案 1 :(得分:0)

我认为gdb不包含汇编程序,因此我不希望能够直接进入程序集。

您可以使用shell gdb命令运行shell命令:

(gdb) shell uname -m
x86_64