5

我正在寻找一个库,它将 x86 代码反汇编成某种对象模型,然后我可以使用它来编写分析代码的例程。我对将 x86 代码转换为文本反汇编的库不感兴趣——我发现其中不止一些,但它们并不是那么有用,因为我想在我反汇编的代码之上做一些工作. 哦,我希望它是 .Net 代码(最好是 VB 或 C#)。

4

3 回答 3

6

据我所知,Reflector 不支持 x86。

最好的办法是使用OllyDbgIDA Pro的脚本或 COM 接口。

如果你负担得起,我会推荐 IDA Pro。IDA 有非常丰富的 API、积极的开发和大量的文档。您可以在自主模式下运行它,我相信使用“-AS”开关。有关命令行参数的更多信息,请参见http://www.hex-rays.com/idapro/idadoc/417.htm

我也遇到了libdasm,但从未使用过它,所以不确定它有多好。libdasm 看起来像 C/C++,所以用 C# 编写 API 包装器应该很简单。

于 2009-05-20T21:13:27.830 回答
4

一个老问题,但是如果其他人出现并且您追求的是 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]
于 2015-07-11T23:38:50.070 回答
3

死灵术,已经过去了相当长的一段时间。
是的,实际上有几个。

Capstone.NET 的功能非常完整(libcapstone-port ARM、ARM64(又名 ARMv8/AArch64)、M68K、Mips、PowerPC、Sparc、SystemZ、XCore、X86(包括 X86_64)。它支持大多数现代 CPU 扩展):
https ://github.com/9ee1/Capstone.NET
http://www.capstone-engine.org/features.html
(麻省理工学院许可)

然后,如前所述,还有 SharpDisasm(libudis-port):
https
://sharpdisasm.codeplex.com/ (简化 BSD 许可证(BSD))

然后是 Reko (x86-DECOMPILER)
https://github.com/uxmal/reko
(GNU General Public License)

有 ElfSharp 可以读取 ELF 文件:
https
://github.com/konrad-kruczynski/elfsharp (MIT & LLVM License)

或者像这样阅读 PE 格式:
http ://code.cheesydesign.com/?p=572

或使用 PETools:
https
://github.com/jsok/PETools (MIT 许可证)

还有一个检查 lib 文件的工具:
https ://github.com/BlazingHeart/SymbolExplorer

还有一个 x86 汇编程序库:
https ://code.google.com/p/managed-x86/

以及 ELF 散列函数
https://damieng.com/blog/2007/11/24/calculating-elf-32-in-c-and-net


另外,wikibooks 上有一个专门的页面:
https://en.wikibooks。 org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

还有雪人反编译器,它使用 Capstone:
https ://github.com/yegord/snowman

还有一个完全托管的 x86 汇编器: https ://github.com/meikeric/managed-x86

于 2015-11-09T10:21:56.963 回答