-
Notifications
You must be signed in to change notification settings - Fork 82
Open
Labels
analysis-neededThis issue needs analysis and possible research to solve.This issue needs analysis and possible research to solve.bugSomething isn't workingSomething isn't working
Description
Describe the bug
- RetroWrite fails on symbolizing RIP-relative addressing.
I observed that RetroWrite fails on recovering RIP-relative addressing. As an example, given instruction ‘leaq fix_syms(%rip), %rsi’ found in addr2line of binutils, RetroWrite reassembled the instruction as ‘leaq 5(%rip), %rsi’.
- Compiler-generated assembly
_bfd_fix_excluded_sec_syms:
.cfi_startproc
movq %rdi, %rdx
movq 40(%rsi), %rdi
leaq fix_syms(%rip), %rsi
jmp bfd_link_hash_traverse # TAILCALL
.cfi_endproc
fix_syms:
.cfi_startproc
pushq %r14
- Binary
00000000000a663f <_bfd_fix_excluded_sec_syms>:
a663f: mov %rdi,%rdx
a6642: mov 0x28(%rsi),%rdi
a6646: lea 0x5(%rip),%rsi # a6652 <fix_syms>
a664d: jmpq a3ec0 <bfd_link_hash_traverse>
00000000000a6652 <fix_syms>:
a6652: push %r14
- Reassembler-generated assembly
.LCa6646:
leaq 5(%rip), %rsi
- RetroWrite omits the definition of some labels.
Also, I found that RetroWrite sometimes omits some definitions of labels. For example, given the data pointer 0x170c80, RetroWrite symbolized the pointer as '.LC170c80', but RetroWrite misses the definition of the label '.LC170c80'. As a result, it causes a compilation error.
Describe how to reproduce the bug
- Platform: x86-64.
- Compiler: Clang v12.0 and GCC v7.5.0
- Binary: addr2line in binutils-2.31.1
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
analysis-neededThis issue needs analysis and possible research to solve.This issue needs analysis and possible research to solve.bugSomething isn't workingSomething isn't working