首页 文章

x86 asm反汇编程序库

提问于
浏览
2

是否有可以从.NET调用的库,我可以在其中传递二进制数据并将其反汇编为x86汇编代码?

4 回答

  • 2

    如果您不介意使用P / Invoke绑定到非托管dll,请查看beaengine,它是您可能找到的最佳反汇编程序库 .

  • 3

    libdisasm

    libdisasm库提供来自二进制流的Intel x86指令的基本反汇编 . 目的是提供一个易于使用的反汇编程序,可以从任何应用程序调用;反汇编可以用AT&T语法和Intel语法生成,也可以以包含详细指令和操作数类型信息的中间格式生成 .

    官方项目将其作为* nix库提供 . HoweverPhenoelit的人写了一个基于该库的Windows调试器并将其移植到Windows . 您可以在页面底部下载整个应用程序的源代码(是的,它们包含用于Windows的libdisasm端口) .

  • 2

    由cyanic提供的链接似乎不再可用 .

    如果您使用100%C#.NET实现而不是使用互操作,SharpDisasm为Intel和AT&T语法提供了x86 / x86-64反汇编程序 . 它将每个指令解码为一个对象,该对象提供对该指令的低级信息的访问(例如指令大小,操作数和类型等) .

    SharpDisasm是libudis86 C库反汇编程序的完整C#端口 .

    反汇编程序通过 SharpDisam.Disassembler 类暴露 .

    从提供的示例控制台应用程序输出:

    C:\>echo a1 c9 fd ff ff a1 37 02 00 00 b8 37 02 00 00 b4 09 8a 
    25 09 00 00 00 8b 04 6d 85 ff ff ff 89 45 f0| disasmcli 32
    
    00000000 a1 c9 fd ff ff                 mov eax, [0xfffffdc9]
    00000005 a1 37 02 00 00                 mov eax, [0x237]
    0000000a b8 37 02 00 00                 mov eax, 0x237
    0000000f b4 09                          mov ah, 0x9
    00000011 8a 25 09 00 00 00              mov ah, [0x9]
    00000017 8b 04 6d 85 ff ff ff           mov eax, [ebp*2-0x7b]
    0000001e 89 45 f0                       mov [ebp-0x10], eax
    
    C:\>echo 488b05f7ffffff67668b40f06766035e1048030425ffff
    000067660344bef04c0384980000008048a10000000000800000 | disasmcli 64
    
    0000000000000000 48 8b 05 f7 ff ff ff           mov rax, [rip-0x9]
    0000000000000007 67 66 8b 40 f0                 mov ax, [eax-0x10]
    000000000000000c 67 66 03 5e 10                 add bx, [esi+0x10]
    0000000000000011 48 03 04 25 ff ff 00 00        add rax, [0xffff]
    0000000000000019 67 66 03 44 be f0              add ax, [esi+edi*4-0x10]
    000000000000001f 4c 03 84 98 00 00 00 80        add r8, [rax+rbx*4-0x80000000]
    0000000000000027 48 a1 00 00 00 00 00 80 00 00  mov rax, [0x800000000000]
    
  • 2

    我已经尝试过BeaEngine和diStorm的.NET包装器,但它们要么崩溃要么根本不拆解 . 我确实找到了LibDasm的托管端口作为BlackStorms reverse engineering framework的一部分,到目前为止它似乎工作 . 如果需要,它还包含PE操作代码 .

相关问题