如何使用 gdb 在当前指令指针之前(上一个)打印指令?

问题描述 投票:0回答:3

如何使用 gdb linux 打印当前指令指针之前(之前)的指令?

linux gdb
3个回答
2
投票

在具有固定指令长度的处理器上(例如

SPARC
),这非常简单:

(gdb) disas $pc-40,$pc+1

x86_64
上,同样的方法也有效,但有一个警告:
$pc-40
可能会在指令中间“着陆”,并且对于前几条指令,您会得到“垃圾”。但是,“通常”反汇编会重新同步,并且输出的尾部是正确的。很少没有,然后你必须尝试 $pc-41
$pc-42
    


1
投票
Machine Code

部分,当您为 disassemble 命令指定参数时,可以在表达式中使用

$pc
,例如

disas $pc-8, $pc



0
投票
x /<N>i $pc

从当前程序计数器中反汇编一些指令。幸运的是,N 可以是任何数字,包括负数,因此,当 N 为 -1 时,您将得到上一条指令

>>> x /-1i $pc
   0x8001040 <main>:    xor    %eax,%eax

>>> disas
Dump of assembler code for function main:
   0x0000000008001040 <+0>:     xor    %eax,%eax
=> 0x0000000008001042 <+2>:     ret
End of assembler dump.

必须使用行号信息进行编译,即:
gcc -g

参考:

https://sourceware.org/gdb/onlinedocs/gdb/Memory.html

© www.soinside.com 2019 - 2024. All rights reserved.