objdump使用技巧总结

#反汇编工程中的具体函数#

使用场景:代码量较大,且知道重点关注的函数。或者说工程中热点较高的核心函数名。

要使用 `objdump` 反汇编目标文件(`*.o`)中的特定函数 `A`,可以按照以下步骤操作:

1.找到函数的地址范围

首先,需要找到函数 `A` 在目标文件中的地址范围。可以通过以下命令查看符号表:

```bash
objdump -t example.o
```

在输出中,找到函数 `A` 的地址(通常是 `00000000` 到某个偏移量)。例如:

```
00000000 g     F .text  0000001a A
```

- 这里 `00000000` 是函数的起始地址,`0000001a` 是函数的大小(26 字节)。

---

2. 反汇编特定函数

使用 `objdump -d` 反汇编整个目标文件,然后结合 `grep` 或 `awk` 提取特定函数的代码。

#### 方法 1:使用 `grep` 提取函数
```bash
objdump -d example.o | grep -A 20 '<A>:'
```

- `grep -A 20` 会显示匹配行及其后的 20 行(可以根据函数大小调整行数)。
- `<A>:` 是函数 `A` 的标签。

#### 方法 2:使用 `awk` 提取函数
```bash
objdump -d example.o | awk '/<A>:/,/^$/'
```

- 这会从 `<A>:` 开始提取,直到遇到空行(函数结束)。

#### 方法 3:使用 `objdump` 的 `--start-address` 和 `--stop-address`
如果知道函数的起始地址和大小,可以直接指定地址范围:

```bash
objdump -d --start-address=0x00000000 --stop-address=0x0000001a example.o
```

- `--start-address` 是函数的起始地址。
- `--stop-address` 是函数的结束地址(起始地址 + 大小)。

---

3. 示例


假设目标文件 `example.o` 中有一个函数 `A`,其地址范围为 `0x00000000` 到 `0x0000001a`。

#### 查看符号表
```bash
objdump -t example.o
```

输出:
```
00000000 g     F .text  0000001a A
```

#### 反汇编函数 `A`
```bash
objdump -d example.o | awk '/<A>:/,/^$/'
```

或者:
```bash
objdump -d --start-address=0x00000000 --stop-address=0x0000001a example.o
```

4. 注意事项


- 如果函数 `A` 是静态函数(`static`),它的符号名可能会被编译器修饰(例如加上前缀或后缀)。可以使用 `objdump -t` 查看完整的符号名。
- 如果目标文件是经过优化的,函数 `A` 的代码可能会被内联或拆分。此时可能需要结合调试信息(`-g` 编译选项)来分析。

5. 结合调试信息(可选)


如果目标文件包含调试信息(使用 `-g` 编译),可以使用 `-S` 选项将反汇编代码与源代码混合显示:

```bash
objdump -S example.o | awk '/<A>:/,/^$/'
```

这会显示函数 `A` 的反汇编代码及其对应的源代码(如果有)。

---

通过以上方法,你可以轻松反汇编目标文件中的特定函数并分析其实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值