[英]Execute an instruction/command in gdb
看起来有一种方法可以通过compile...code
将 C 代码注入 gdb 。
有没有办法在命令行中注入一条指令? 例如,类似:
>>> mov %rax, %rbx
# Undefined command: "mov". Try "help".
据我所知,这不是一种简单的交互方式; 我不认为 GDB 的命令解析器内置了一个汇编器,只是从 memory 反汇编代码的命令。 理论上可能是某种外部组装+加载某处。
您当然可以set $rbx = $rax
来复制特定mov
的效果。
(GDB 使用$
作为 GDB 表达式中的寄存器名称的修饰符。)
要使用单个指令并查看它们的作用,最好的办法是将它们放入.s
文件中并将它们构建到 static 可执行文件中,然后您可以使用 GDB 单步执行。
$ cat > foo.s
mov %rax, %rbx
(hit control-d here for EOF)
$ gcc -static -nostdlib foo.s
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
(That's fine, the top of the .text section is where you want the entry point)
$ gdb ./a.out
(gdb) starti # stop before the first instruction
(gdb) set $rax = 0x1234 # or whatever to make the effect visible
(gdb) si
(gdb) quit # or starti to restart or whatever
如果您让执行从那里继续,它当然会出现段错误,因为它将文本部分后面的00 00
字节解码为add %al, (%rax)
。
最近的 GDB 似乎在你的~/.gdbinit
starti
的layout reg
上崩溃,如果入口点没有符号,不幸的是,你可能需要在 your.s 中使用.globl _start
/ _start:
:。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.