Не удалось отключить мое приложение - не найдено никакой отладочной информации

Я пытаюсь разобрать приложение, написанное на сборке. Я нахожусь в Linux, x64:

$ objdump -d my_app 

my_app:     file format elf64-x86-64

Что это. Что с этим не так? Это не просто hello world нескольких строк, это около 200 строк кода.

То же самое с gbd:

$ gdb -q my_app 
Reading symbols from my_app...(no debugging symbols found)...done.
(gdb) 

и

$ radare2 my_app 
Warning: Cannot initialize section headers
Warning: Cannot initialize strings table
Warning: Cannot initialize dynamic strings
Warning: Cannot initialize dynamic section
 -- Calculate checksums for the current block with the commands starting with '#' (#md5, #crc32, #all, ..)

Обновление

$ objdump -d my_app 

my_app:     file format elf64-x86-64

компилирования:

   $ fasm my_app.asm 
   # => my_app 

Update2:

; simplified

format ELF64 executable 3

include "import64.inc"
interpreter "/lib64/ld-linux-x86-64.so.2"
needed "libc.so.6"
import printf, close

segment readable
    A equ 123
    B equ 222
    C equ 333

segment readable writeable
    struc s1 a, b, c {
      .a1 dw a
      .b1 dw b
      .c dd c
    }

    msg:
        .m1 db "aaa", 0
        .m2 db "bbb", 0
        .m3 db "ccc", 0

segment readable executable
entry $
    mov rax, 2
    mov rdi, "something.txt"
    mov rsi, 0
    syscall

    ; .............
    ; omitted

Ответ 1

Просьба fasm напрямую создавать двоичный файл ELF без использования компоновщика будет создавать только сегменты, но без вывода на выходе. Это смущает некоторые инструменты. В частности, objdump -d специально документируется для работы с разделами. Обратите внимание, что gdb может все еще отлаживать и дизассемблировать его, если вы дадите ему некоторые адреса, например. точка входа.