Intel XED (дизассемблер) -as [Адрес для начала дизассемблирования] не работает - PullRequest
0 голосов
/ 20 февраля 2020

Этот работает отлично, но предоставляет все машинные адреса, начинающиеся с нуля:

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)

Этот правильный ответ предоставлен Петром 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 

Это то, чего я хотел добиться, и синтаксис был предоставлен Питером Кордесом, показанным ниже
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 

1 Ответ

1 голос
/ 21 февраля 2020

-i -as сообщает, что входной файл -as. Кроме того, существуют случайные аргументы 0xb4 и Halt7.obj, которые не являются аргументами для каких-либо параметров.

Вы должны сохранить имя файла в качестве следующего параметра после -i или -ir.

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

Я думаю, -as и -ae просто ограничивают диапазон, в котором инструкции разбираются. Они не меняют, какой адрес печатается рядом с любой разобранной инструкцией .

Я думаю, что вы на самом деле хотите установить адрес base с -b:

xed -i a.out  -b 0x55000

производит такую ​​разборку для исполняемого файла Linux P IE.

# 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 изображение base 0 (и в текстовый раздел начинается 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 он просто плоский, без маркера вверху функции.

...