ARM64 汇编中有关 jump table 的问题

2021-04-05 23:28:45 +08:00
 menyakun

我知道了 jump table 的地址,从 rodata 中 dump 出了对应的数据,但不知道 jump table 中的数据是按照什么格式组织的

表的一行是 4 个字节,所以"fffe90d4", "fffe9124"这些值代表了地址的 offset ?但这些值也太大了吧,这个函数没这么多行。

我查了老半天,也没有查到相关的资料,求懂汇编的老哥帮忙看看。

2320 次点击
所在节点    程序员
6 条回复
Nerv
2021-04-05 23:40:13 +08:00
只试过用 readelf 读取 linux x86-64 elf 文件的 symtable,不知道对应的 arm 版本有没有这种功能。
menyakun
2021-04-05 23:42:24 +08:00
@Nerv 这个 jump table 是一个 switch-case 生成的,所以对应的目标地址没有记录在 symtable 里面
wezzard
2021-04-05 23:49:52 +08:00
這裡存儲的是一個相對偏移量,應該看成一個有符號的整數。你應該用該條記錄的基址加上這個有符號的相對偏移,然後得出跳轉目標地址。
akira
2021-04-06 01:52:48 +08:00
看到 feff 就觉得应该是 -100
levelworm
2021-04-06 02:27:34 +08:00
看到 ff 打头的我第一反应是 sign extended,具体得去查查。。。
zk8802
2021-04-06 06:31:13 +08:00
Jump table 中常见的地址 /偏移编码方式有好几种。你需要看一下对应的汇编指令是如何解析这个 jump table 的。

另外你这里面的负数大概率是相对 PC 的偏移。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/768203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX