1d21a: f7fa e8e8 blx 173ec ; __android_log_print@plt ...
当前,我只能显示像这样(#2):
1d21a: f7fa e8e8 blx 173ec
要显示类似#1的数据,我听说我需要解析PLT或GOT或PLTGOT。但是我不知道如何使用它们显示函数名称。 (当然,我还不知道如何解析它)
我的理论方法是分解PLT并找到目标偏移量并执行一些操作。
示例;
000173ec __android_log_print@plt:
173ec: e28fc600 add ip, pc, #0, 12 ; ip!=pc?
173f0: e28cca11 add ip, ip, #69632 ; addr of got?
173f4: e5bcf9f4 ldr pc, [ip, #2548]!; index=2548
000173f8 sleep@plt:
173f8: e28fc600 add ip, pc, #0, 12
173fc: e28cca11 add ip, ip, #69632
17400: e5bcf9ec ldr pc, [ip, #2540]!
...
我认为我可以通过拆卸PLT来赚取#2548或#2540的价格,但没有信心。
有什么办法吗?解析PLT并在反汇编中显示类似#1的数据?
谢谢!
#1 楼
可从动态段PT_DYNAMIC
获得此信息。这是结构ElfXX_Dyn
的数组。您必须搜索DT_REL
或DT_RELA
类型。这是
ElfXX_Rel
或ElfXX_Rela
的数组。字段r_offset
是GOT条目的偏移量。可以使用字段r_info
检索名称。它包含ElfXX_Sym
的索引。您可能想使用外部库来执行此操作。