我正在阅读有关跳转表的课程的示例。他们打电话gdb x/8g 0x123456
结果输出如下所示:
0x123456 0x000000000000134234 0x0000000000005f424
0x123487 0x0000000000001dd1ac 0x000000000000ef327
我认为跳转表将地址映射到它应该执行的代码的地址。那么为什么有 3 列(不应该是 2 列吗?)。
我正在阅读有关跳转表的课程的示例。他们打电话gdb x/8g 0x123456
结果输出如下所示:
0x123456 0x000000000000134234 0x0000000000005f424
0x123487 0x0000000000001dd1ac 0x000000000000ef327
我认为跳转表将地址映射到它应该执行的代码的地址。那么为什么有 3 列(不应该是 2 列吗?)。
那么为什么有 3 列(不应该是 2 列吗?)
您没有粘贴真正的 GDB 输出,它看起来像:
0x123450 0x000000000000134234 0x0000000000005f424
0x123460 0x0000000000001dd1ac 0x000000000000ef327
(第一列不同)。在编程中,细节很重要。
如果您使终端变窄,那么您将获得 2 列,如下所示:
0x123450 0x000000000000134234
0x123458 0x0000000000005f424
0x123460 0x0000000000001dd1ac
0x123468 0x000000000000ef327
正如 KerrekSB 建议的那样,阅读 GDB 手册以了解其x
作用。提示:第一列并不重要——它是表本身的存储位置。