无法对我的应用程序进行装配 - 没有找到调试信息
问题描述:
我试图用程序集编译应用程序。我在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
答
询问fasm
直接产生一个ELF二进制不使用接头将仅创建段,但是在输出中没有节。这混淆了一些工具。特别是objdump -d
被具体记录在章节中操作。请注意,如果你给它一些地址,例如gdb
仍然可以调试和反汇编它。入口点。
您是否尝试过'objdump -D'反汇编所有部分?甚至可以使用'ndisasm'来拆分整个文件,就好像它是一个平面二进制文件。 (默认模式是16位,因此将其设置为64位)。 –
您是否尝试过使用简单的fasm程序并以相同的方式构建它以查看会发生什么? –
@MichaelPetch相同的东西 – Uji