繁体   English   中英

在 gdb 中执行指令/命令

[英]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 startilayout reg上崩溃,如果入口点没有符号,不幸的是,你可能需要在 your.s 中使用.globl _start / _start: :。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM