12、Linux/Unix系统编程基础解析

Linux/Unix系统编程基础解析

1. 应用程序汇编分析

使用 objdump 工具可以对应用程序进行反汇编,查看 .text 节中的代码。例如在某个应用中,代码在调用 std::cout 之前,会将字符串的地址(位于 0x905 )加载到 rsi 寄存器,此地址作为第二个参数。需要注意的是,该应用使用 -pie 命令编译,这意味着应用本身会被重定位,所以字符串的实际地址不是 0x905 ,而是 # + 0x905

为避免使用重定位项(即全局偏移表GOT中的项),程序采用指令指针相对偏移。在这个例子中,加载 rsi 的指令位于 0x805 ,使用偏移量 0x100 ,最终得到 0x905 + rip 。这使得无论应用在内存中的加载位置如何,代码都能定位到字符串,无需重定位项。

2. ELF段分析

ELF段将各个节组合成可加载的组件,并描述了如何以及在何处将ELF文件加载到内存中。理想情况下,ELF加载器只需读取ELF段就能加载ELF文件,对于可重定位的ELF文件,还需加载动态节和重定位节。

以下是一个简单示例中ELF文件各段的作用:
| 段序号 | 段作用 |
| ---- | ---- |
| 第一段 | 描述程序头(定义各段),大部分情况下可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值