在Linux ELF格式的文件中定位到对应的函数位置

转自:

https://blog.csdn.net/simaowebex/article/details/53691743

1、Linux ELF文件格式解析

readelf -h elfname (headers) 
readelf -l elfname (segments program headers) 
readelf -S elfname (sections) 
readelf -s elfname (symbols) 

可以通过readelf工具来查看解析ELF文件中的相关信息。elf文件视图如下图,所示,可以从链接视图和执行视图两个方面来进行分析与查看

2、如何定位一个函数在elf文件中的偏移

例如现在有elf文件libcac.so,在libcac.so中,定义了add、div、mul、sub四个函数。

1)我们使用readelf来查看相关信息,readelf -s libcac.so 确定函数对应的symbol在挂载的地址,以及二进制代码的大小。 

使用readelf -s libcac.so进行符号查看

可以看到我们定义的这些add、div等对应的虚拟地址为0x5cc、0x5f8等,大小为20、23等。

使用

objdump -S libcac.so

获得信息可以验证这个信息的正确性,如下图所示

可以发现是一致的

2)根据函数对应的虚拟地址,找到对应的Section(使用readelf -S [elffilename]),然后确定函数起始地址数据在elf文件中偏移。

在这里使用命令

readelf -S libcac.so

我们发现0x5cc这个地址落在了.text Section中,这个Section 在文件中的偏移位置是0x500。那么0x5cc这个地址在文件中偏移位置就是0x504了。使用hexdump这个工具可验证这个结论的正确性(文件中add函数的源码内容跟objdump输出的一模一样)。

hexdump libcac.so

 

现在我们只是找到了这样的一个偏移,那么具体的函数地址是什么呢,其实就是这个libcac.so被映射到的进程虚拟地址空间的首地址加上这个偏移0x5cc。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值