2017-04-12 79 views
2

假设我有一个ELF二进制prog和假设objdump -d prog大致如下产生输出[片段]:如何在与objdump输出的标签对应的ELF二进制文件中获得文件偏移量?

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偏移,因为我需要在该位置修改字节。

我将如何完成此任务?

+0

使用节标题('objdump -h')并通过虚拟地址偏移进行调整。或者,只需搜索足够长的字节序列。 – Jester

+0

@Jester - 你会详细解答你的答案吗? – Shuzheng

回答

6

您可以通过使用-F获得OBJDUMP转储文件偏移量。从OBJDUMP documentation

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

尝试使用objdump -DF prog。您应该看到的文件,资料等进行偏移列出的每个标签:

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

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

+0

谢谢!这非常有帮助! – Shuzheng