【问题标题】:How to disassemble fasm-generated binary?如何反汇编 fasm 生成的二进制文件?
【发布时间】:2019-10-20 17:56:37
【问题描述】:

我正在用 FASM 汇编程序编写程序,想看看在所有宏扩展之后生成了什么代码。通常可以使用objdump -d 解开二进制文件,但对于由 fasm 生成的二进制文件,它只输出以下内容:

$ cat true.fasm
format ELF64 executable
sys_exit = 60
entry $
      mov eax, sys_exit
      xor edi, edi
      syscall
$ fasm true.fasm
$ objdum -d ./true
out/true:     file format elf64-x86-64

我能做的是将二进制文件加载到gdb,以starti 开始,并以x/10i $rip 解码指令,这是次优的。是否有非交互式命令可以做到这一点?

【问题讨论】:

  • FASM 不创建 ELF 部分信息(因此没有 .text 部分),只有告诉操作系统如何将其映射到内存的程序头。我不知道一个很好的方便的方法来反汇编它,除了把它当作一个平面二进制文件并反汇编所有东西(例如ndisasm -b32)。然后自己找到实际指令的开始。
  • 您可以尝试使用objdump的-D(大写D,全部反汇编)选项,看看效果是否更好。
  • -D 产生相同的输出:`文件格式elf64-x86-64`

标签: assembly disassembly fasm


【解决方案1】:

您可以轻松使用radare2,使用pdf 命令,这意味着disassemble

% cat test.asm 
format ELF64 executable
sys_exit = 60
entry $
  mov rax, sys_exit
  xor rdi, rdi
  syscall
% ./fasm test.asm
flat assembler  version 1.73.04  (16384 kilobytes memory) 1 passes, 132 bytes.
% file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
% r2 -AA test
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze function calls (aac)
[x] Analyze len bytes of instructions for references (aar)
[x] Check for objc references
[x] Check for vtables
[x] Type matching analysis for all functions (aaft)
[x] Propagate noreturn information
[x] Use -AA or aaaa to perform additional experimental analysis.
[x] Finding function preludes
[x] Enable constraint types analysis for variables
-- In visual mode press 'c' to toggle the cursor mode. Use tab to navigate
[0x00400078]> pdf
        ;-- segment.LOAD0:
        ;-- rip:
┌ 12: entry0 ();
│           0x00400078      48c7c03c0000.  mov rax, 0x3c               ; '<' ; 60 ; [00] -rwx segment size 12 named LOAD0
│           0x0040007f      4831ff         xor rdi, rdi
└           0x00400082      0f05           syscall
[0x00400078]> 

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2020-07-05
    • 2012-12-26
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多