assembly - gdb 中汇编注释中列出的地址的含义
问题描述
在gdb
会话中,如何计算程序集输出的注释中的地址列表?举个例子,我目前正在执行以下指令:
0x0000555555556140 ? jmpq *0x7af5a(%rip) # 0x5555555d10a0 <strlen@got.plt>
我们可以确认指令指针与左栏中显示的地址匹配:
(gdb) p $rip
$1 = (void (*)()) 0x555555556140 <strlen@plt>
从这里,我们将跳转到 指向的地址$rip + 0x7af5a
。带有跳转指针的地址
(gdb) p/z ($rip + 0x7af5a)
$2 = 0x00005555555d109a
指着
(gdb) x/g ($rip + 0x7af5a)
0x5555555d109a <getpwuid@got.plt+2>: 0xd1e0000055555555
这与该指令 ( ) 的注释中的地址不匹配0x5555555d10a0
,我天真地以为它是为了传达跳转的去向。
该地址原来7af60
来自当前指令:
(gdb) p/z 0x5555555d10a0 - 0x0000555555556140 # commented address - current address
$3 = 0x000000000007af60
即 ,$rip + 0x7af60
超出跳转指针 ( $rip + 0x7af5a
) 的 6 个字节。注释超出跳转指针 6 个字节的地址有什么意义?
不依赖GDB反汇编提供的注释,如何在GDB控制台中显示跳转地址? 或分配给 GDB 变量以在编写 GDB 脚本时使用。
解决方案
推荐阅读
- python - Python 中的命名条件和一本愚蠢的教科书——以及如何证明它们是错误的
- javascript - 为什么每次 React 渲染都会创建新对象?
- c# - Xamarin Forms Android WebView 文件上传不起作用
- api - 移动应用程序应该如何与 web api 交互?
- clang - clang 将 callExpr.getArg 类型转换为 decl
- javascript - 如何抓取由 javascript 填充的表?
- javascript - 反应道具给我错误:无法解构“道具”的属性“调度”,因为它是未定义的
- django - DetailView中的分页与上下文?[django]
- c# - EFCore、CodeFirst、多对多关系 - 我需要密钥吗?
- reactjs - 当 WiFi 重新打开时,React Native 的 NetInfo 未捕获