【发布时间】:2026-02-09 02:05:01
【问题描述】:
我可以使用call来运行c函数,但是如何直接运行汇编甚至shell代码呢?
【问题讨论】:
我可以使用call来运行c函数,但是如何直接运行汇编甚至shell代码呢?
【问题讨论】:
我不认为gdb包含汇编器,所以我不希望能够直接进入汇编。
您可以使用@987654321@ gdb 命令运行shell命令:
(gdb) shell uname -m
x86_64
【讨论】:
\x23\x24... 之类的东西
要执行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 中执行操作码,但你当然可以用寄存器做任何你想做的事情。例如,您可以使用set $rax = $rbx,而不是mov %rbx, %rax:
(gdb) p $rax
$1 = 3671197290184
(gdb) set $rax = $rbx
(gdb) p $rax
$2 = 0
(gdb)
【讨论】:
let和set有什么区别?
set。我会修复帖子。