【发布时间】:2017-10-18 03:46:43
【问题描述】:
我正在尝试反汇编以汇编语言编写的应用程序。我在 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
更新2:
; 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
【问题讨论】:
-
你试过
objdump -D来反汇编所有部分吗?甚至ndisasm将整个文件反汇编,就好像它是一个平面二进制文件一样。 (默认模式是 16 位,所以设置为 64 位)。 -
您是否尝试过使用简单的 fasm 程序并以相同的方式构建它以查看会发生什么?
-
@MichaelPetch 同样的事情
-
我会说你的程序集文件有问题,它正在生成一个不寻常的 ELF 文件(那些似乎没有部分的文件?)。你会幽默我们并张贴所有 200 行吗?或者将程序集文件减少到最小的ins集,一旦组装成可执行文件,仍然会重现相同的行为
-
@jww 他正在使用 fasm,所以甚至可能没有链接阶段(fasm 通常允许您使用一个命令从汇编代码转到可执行文件)