【问题标题】:x86 asm disassembler libraryx86 asm 反汇编程序库
【发布时间】:2011-07-08 01:34:35
【问题描述】:

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

【问题讨论】:

  • 您希望代码采用什么形式?文字?
  • 对于汇编(也可能反汇编,但 IDK),keystone-engine.org 具有 C# 绑定,以及从 C/C++ 到 NodeJS、Perl、Python 等的许多其他语言。

标签: assembly x86 disassembly


【解决方案1】:

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

【讨论】:

  • 我认为这是我要使用的库 - 非常易于使用,并且还有一个 C# 包装器可用。谢谢=)
【解决方案2】:

libdisasm

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

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

【讨论】:

    【解决方案3】:

    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]
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • @cyanic 你好我已经更新了你的链接,因为那个链接现在已经死了,现在找到这个框架非常困难,不是真的很难哈哈,但几年后会更难,所以我镜像了我自己。 这是唯一包含完全移植到 C# .NET 的 LibDasm 的 C# 软件
      猜你喜欢
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多