2017-10-18 54 views
3

我试图用程序集编译应用程序。我在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 
+0

您是否尝试过'objdump -D'反汇编所有部分?甚至可以使用'ndisasm'来拆分整个文件,就好像它是一个平面二进制文件。 (默认模式是16位,因此将其设置为64位)。 –

+0

您是否尝试过使用简单的fasm程序并以相同的方式构建它以查看会发生什么? –

+0

@MichaelPetch相同的东西 – Uji

回答

2

询问fasm直接产生一个ELF二进制不使用接头将仅创建段,但是在输出中没有节。这混淆了一些工具。特别是objdump -d被具体记录在章节中操作。请注意,如果你给它一些地址,例如gdb仍然可以调试和反汇编它。入口点。

+0

>请注意,如果您给它一些地址,gdb仍然可以对其进行调试和反汇编。入口点。 – Uji

+0

如何?.................. – Uji

+1

@Uji您可以滥用'gdb'的任何失败机制。使用'file'加载它,然后将断点放在无效地址上,如零'b * 0',然后'run' ...由于断点无效,'gdb'将在第一条指令中断裂。删除它'd 1'(如果添加了“断点1”),并且因为在这里您可以'stepi'/etc ... – Ped7g

相关问题