0

我正在阅读有关跳转表的课程的示例。他们打电话gdb x/8g 0x123456

结果输出如下所示:

0x123456    0x000000000000134234    0x0000000000005f424
0x123487    0x0000000000001dd1ac    0x000000000000ef327

我认为跳转表将地址映射到它应该执行的代码的地址。那么为什么有 3 列(不应该是 2 列吗?)。

4

1 回答 1

1

那么为什么有 3 列(不应该是 2 列吗?)

您没有粘贴真正的 GDB 输出,它看起来像:

0x123450    0x000000000000134234    0x0000000000005f424
0x123460    0x0000000000001dd1ac    0x000000000000ef327

(第一列不同)。在编程中,细节很重要

如果您使终端变窄,那么您将获得 2 列,如下所示:

0x123450    0x000000000000134234
0x123458    0x0000000000005f424
0x123460    0x0000000000001dd1ac
0x123468    0x000000000000ef327

正如 KerrekSB 建议的那样,阅读 GDB 手册以了解其x作用。提示:第一列并不重要——它是表本身的存储位置。

于 2014-06-14T21:11:29.577 回答