英特尔 XED(反汇编程序)-as [开始反汇编的地址] 选项不起作用

Intel XED (disassembler) -as [Address to start disassembling] option doesn't work

这个工作正常但提供所有从零开始的机器地址:

xed -i Halt7.obj

我真的需要机器地址从它们的 COFF 目标文件偏移量开始。

这是我尝试过的方法:他们给了我帮助消息(选项列表),指出我的选项规范中存在语法错误。

xed -i  -as 0xb4              Halt7.obj
xed -ir -as 0xb4              Halt7.obj
xed -i  -as 0xb4 -ae 0x121    Halt7.obj
xed -ir -as 0xb4 -ae 0x121    Halt7.obj 

需要满足以下条件之一:

    -i input_file             (decode pecoff-format file)
    -ir raw_input_file        (decode a raw unformatted binary file)

可选参数:

    -as addr      (Address to start disassembling.
                   Use 0x for hex addresses)
    -ae addr      (Address to end   disassembling.
                   Use 0x for hex addresses)

Peter Cordes 提供的正确答案如下所示

此选项正确地反汇编了文件,但显示了从偏移量零开始的地址。
xed -i Halt7.obj

XDIS  0: PUSH      BASE       55                       push ebp
XDIS  1: DATAXFER  BASE       8BEC                     mov ebp, esp
XDIS  3: PUSH      BASE       51                       push ecx
XDIS  4: DATAXFER  BASE       C745FC00000000           mov dword ptr [ebp-0x4], 0x0
XDIS  b: DATAXFER  BASE       8B45FC                   mov eax, dword ptr [ebp-0x4]
XDIS  e: PUSH      BASE       50                       push eax
XDIS  f: CALL      BASE       E80C000000               call 0x20
XDIS 14: BINARY    BASE       83C404                   add esp, 0x4
XDIS 17: DATAXFER  BASE       B801000000               mov eax, 0x1
XDIS 1c: DATAXFER  BASE       8BE5                     mov esp, ebp
XDIS 1e: POP       BASE       5D                       pop ebp
XDIS 1f: RET       BASE       C3                       ret 

这是我想要实现的,语法由 Peter Cordes 提供,如下所示
xed -i Halt7.obj -b 0xb4

XDIS b4: PUSH      BASE       55                       push ebp
XDIS b5: DATAXFER  BASE       8BEC                     mov ebp, esp
XDIS b7: PUSH      BASE       51                       push ecx
XDIS b8: DATAXFER  BASE       C745FC00000000           mov dword ptr [ebp-0x4], 0x0
XDIS bf: DATAXFER  BASE       8B45FC                   mov eax, dword ptr [ebp-0x4]
XDIS c2: PUSH      BASE       50                       push eax
XDIS c3: CALL      BASE       E80C000000               call 0xd4
XDIS c8: BINARY    BASE       83C404                   add esp, 0x4
XDIS cb: DATAXFER  BASE       B801000000               mov eax, 0x1
XDIS d0: DATAXFER  BASE       8BE5                     mov esp, ebp
XDIS d2: POP       BASE       5D                       pop ebp
XDIS d3: RET       BASE       C3                       ret 

-i -as 告诉它输入文件是 -as。然后是杂散参数 0xb4Halt7.obj,它们不是任何选项的参数。

-i-ir后的下一个选项必须保留文件名。

xed -as 0xb4 -ae 0x121  -i Halt7.obj

我认为-as-ae只是限制了反汇编指令的范围。 他们不会更改任何反汇编指令旁边打印的地址

我想你真正想要的是用 -b:

设置 base 地址
xed -i a.out  -b 0x55000

为 Linux PIE 可执行文件生成这样的反汇编。

# SECTION 13                     .text addr 10e0 offset 10e0 size 1541
XDIS 560e0: WIDENOP   BASE       F30F1EFA                 nop edx, edi
XDIS 560e4: LOGICAL   BASE       31ED                     xor ebp, ebp
XDIS 560e6: DATAXFER  BASE       4989D1                   mov r9, rdx
XDIS 560e9: POP       BASE       5E                       pop rsi
XDIS 560ea: DATAXFER  BASE       4889E2                   mov rdx, rsp
XDIS 560ed: LOGICAL   BASE       4883E4F0                 and rsp, 0xfffffffffffffff0
XDIS 560f1: PUSH      BASE       50                       push rax
XDIS 560f2: PUSH      BASE       54                       push rsp
XDIS 560f3: MISC      BASE       4C8D05E6050000           lea r8, ptr [rip+0x5e6] <__libc_csu_fini+0x55000>
XDIS 560fa: MISC      BASE       488D0D6F050000           lea rcx, ptr [rip+0x56f] <__libc_csu_fini+0x54f90>
XDIS 56101: MISC      BASE       488D3D62010000           lea rdi, ptr [rip+0x162] <__libc_csu_fini+0x54b8a>
XDIS 56108: CALL      BASE       FF15D22E0000             call qword ptr [rip+0x2ed2] <__libc_csu_fini+0x57900>
XDIS 5610e: SYSTEM    BASE       F4                       hlt

...

没有 -b 选项,图像基础是 0(.text 部分开始 0x10e0 进入文件)所以我们得到

# SECTION 13                     .text addr 10e0 offset 10e0 size 1541

SYM _start:
XDIS 10e0: WIDENOP   BASE       F30F1EFA                 nop edx, edi
XDIS 10e4: LOGICAL   BASE       31ED                     xor ebp, ebp
XDIS 10e6: DATAXFER  BASE       4989D1                   mov r9, rdx
XDIS 10e9: POP       BASE       5E                       pop rsi
XDIS 10ea: DATAXFER  BASE       4889E2                   mov rdx, rsp
XDIS 10ed: LOGICAL   BASE       4883E4F0                 and rsp, 0xfffffffffffffff0
XDIS 10f1: PUSH      BASE       50                       push rax
XDIS 10f2: PUSH      BASE       54                       push rsp
XDIS 10f3: MISC      BASE       4C8D05E6050000           lea r8, ptr [rip+0x5e6] <__libc_csu_fini>
XDIS 10fa: MISC      BASE       488D0D6F050000           lea rcx, ptr [rip+0x56f] <__libc_csu_init>
XDIS 1101: MISC      BASE       488D3D62010000           lea rdi, ptr [rip+0x162] <main>
XDIS 1108: CALL      BASE       FF15D22E0000             call qword ptr [rip+0x2ed2] <__libc_csu_fini+0x2900>
XDIS 110e: SYSTEM    BASE       F4                       hlt
XDIS 110f: NOP       BASE       90                       nop

...

似乎 -b 选项弄乱了符号信息。没有它,输出将分解为函数。

但是对于 -b,它只是平坦的,函数顶部没有标记。