【问题标题】:Format of a jump table跳转表的格式
【发布时间】:2014-08-04 21:30:51
【问题描述】:
我正在阅读有关跳表的课程示例。他们打电话给gdb x/8g 0x123456
生成的输出如下所示:
0x123456 0x000000000000134234 0x0000000000005f424
0x123487 0x0000000000001dd1ac 0x000000000000ef327
我认为跳转表将地址映射到它应该执行的代码的地址。那么为什么会有 3 列(不应该是 2 列吗?)。
【问题讨论】:
标签:
assembly
gdb
jump-table
【解决方案1】:
那为什么有 3 列(不应该是 2 列吗?)
你没有粘贴真正的 GDB 输出,它看起来像:
0x123450 0x000000000000134234 0x0000000000005f424
0x123460 0x0000000000001dd1ac 0x000000000000ef327
(第一列不同)。在编程中,细节很重要。
如果你让终端变窄,那么你会得到 2 列,如下所示:
0x123450 0x000000000000134234
0x123458 0x0000000000005f424
0x123460 0x0000000000001dd1ac
0x123468 0x000000000000ef327
按照 KerrekSB 的建议,阅读 GDB 手册以了解 x 的作用。提示:第一列并不重要——它是表本身的存储位置。