c++ - 如何获取 ELF 二进制文件中与 objdump 输出的标签相对应的文件偏移量?

标签 c++ linux assembly x86 elf

假设我有一个 ELF 二进制文件 prog 并假设 objdump -d prog 产生以下行的输出 [snippet]:

0000000000400601 <.cstart_c941>:
  400601:   eb 01                   jmp    400604 <.end_c941>

0000000000400603 <.cslot_c941>:
  400603:   84                      .byte 0x84

0000000000400604 <.end_c941>:
  400604:   48 81 ec 80 00 00 00    sub    $0x80,%rsp
  40060b:   50                      push   %rax
  40060c:   53                      push   %rbx
  40060d:   56                      push   %rsi
  40060e:   48 31 c0                xor    %rax,%rax
  400611:   48 c7 c6 41 06 40 00    mov    $0x400641,%rsi

我需要的是.cslot_c941对应的文件偏移量,因为我需要修改这个位置的字节。

我将如何完成这项任务?

最佳答案

您可以使用 -F 获取 OBJDUMP 来转储文件偏移量。来自OBJDUMP documentation :

objdump 
         ..snip..
         [-F|--file-offsets]
         ..snip..

尝试使用 objdump -DF prog。您应该看到每个标签都列出了文件偏移量,其中包含如下信息:

0000000000400601 <.cstart_c941>: (File Offset: 0xXXXXXXXX)

0xXXXXXXXX 应该是该标签的文件偏移量。

关于c++ - 如何获取 ELF 二进制文件中与 objdump 输出的标签相对应的文件偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43377195/

相关文章:

c++ - L'A' 和 'A' 完全一样吗?

c++ - 在 Pro*C 中使用 LIKE

python - 多处理进程 os.system ('kill -9 {0}' .format(pid)) 在 Linux 上失败

c - 如何使用libc函数在c中模拟asm代码?

c++ - 将Windows上运行的Delphi中的汇编函数转换为delphi/c++以在Linux上执行

algorithm - 为什么分支位移的 "start small"算法不是最优的?

c++ - 为什么在以下示例中创建临时文件

linux - Tensorflow 推荐的系统规范?

linux - bash 脚本不为变量分配标志

c# - 从 C# 调试 C++ dll