例如,r2在位置
bcmVlan_setDefaultAction
处找到一个名为0x0800d318
的函数:位于0x0000d2c8
[0x0800fbb8]> s sym.bcmVlan_setDefaultAction
[0x0800d318]>
我也尝试了其他一些功能。看来readelf和r2所显示的地址是相关的,但我找不到为什么存在这种区别的原因。
#1 楼
.symtabreadelf(
.symtab
)的符号表显示每个符号与该符号所在部分的底部的偏移量。如您所展示的,当列出表格后,您将得到如下内容:
$ readelf --symbols <filename>
Symbol table '.symtab' contains 471 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 2
2: 00000000 0 SECTION LOCAL DEFAULT 4
3: 00000000 0 SECTION LOCAL DEFAULT 6
4: 00000000 0 SECTION LOCAL DEFAULT 8
5: 00000000 0 SECTION LOCAL DEFAULT 10
6: 00000000 0 SECTION LOCAL DEFAULT 12
... ... Truncated for readability ... ...
462: 0000d2c8 616 FUNC GLOBAL DEFAULT 2 bcmVlan_setDefaultAction
尤其是我们感兴趣的一列,即
Ndx
列。 readelf
通过整数索引标识每个部分。这就是Ndx所代表的。 .symtab
的输出向我们显示我们的函数bcmVlan_setDefaultAction
属于Ndx数字2。 br /> $ readelf --sections <filename>
执行它时,您可能会看到类似以下的内容:可能位于
.text
部分中,其基址(Off
列)为0x000050
,即从文件开头开始的0x50字节。从从readelf
获得的地址中减去从radare2
获得的地址:There are ?? section headers, starting at offset 0x????:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] <section name> <type> 00000000 0000?? 0000?? ?? A 0 0 4
[ 2] .text <type> 00000000 000050 00???? 00 AX 0 0 16
评论
如果地址相关,则可能是由于基地址不同。请比较readelf -l <文件名>的输出。 grep LOAD到radare2的f〜LOAD0的输出。您还可以使用e bin.baddr检查雷达的基址。要重新设置基准,请使用r2 -B <0xaddr> <文件名>。r2或readelf未找到“ LOAD”的实例。看来r2使用的基址是0x0800000。这解释了部分问题。顺便说一句,我发现您有关“ Gameboy”和“ Simple Crackme”的帖子非常有用和有趣。
谢谢!介意分享二进制文件吗?这将有助于我们更好地理解。
该文件实际上是用于MIPS体系结构的Linux内核模块(.ko)。我从路由器上拉了它。 “ modinfo”显示文件许可证为“专有”。我不确定是否可以分享。有什么主意吗?