Есть ли хорошие библиотеки дизассемблера VB/C# x86?[закрыто]

StackOverflow https://stackoverflow.com/questions/890213

  •  23-08-2019
  •  | 
  •  

Вопрос

Я ищу библиотеку, которая будет дизассемблировать код x86 в некую объектную модель, которую я затем смогу использовать для написания процедур, анализирующих код.Меня не интересует библиотека, которая преобразует код x86 в дизассемблирование текста. Я нашел их немало, но они не так уж и полезны, поскольку я хочу поработать над кодом, который я дизассемблирую. .Да, и я бы хотел, чтобы это был код .Net (предпочтительно VB или C#).

Это было полезно?

Решение

Насколько я знаю, Reflector не поддерживает x86.

Лучше всего использовать скрипты или COM-интерфейс для ОллиДбг или ИДА Про.

Я бы порекомендовал IDA Pro, если вы можете себе это позволить.IDA имеет очень богатый API, активную разработку и множество документации.Вы можете запустить его в автономном режиме, я полагаю, используя переключатель «-AS».Видеть http://www.hex-rays.com/idapro/idadoc/417.htm для получения дополнительной информации об аргументах командной строки.

я тоже столкнулся либдасм, но никогда им не пользовался, поэтому не уверен, насколько он хорош.libdasm выглядит как C/C++, поэтому написать оболочку API на C# должно быть несложно.

Другие советы

Старый вопрос, но если придет кто-то еще, и вы предпочитаете 100% реализацию C# .NET, а не использование взаимодействия, SharpDisasm предоставляет дизассемблер x86/x86-64 для синтаксиса Intel и AT&T.Он декодирует каждую инструкцию в объект, который обеспечивает доступ к низкоуровневой информации об инструкции (например,размер инструкции, номер и тип операнда и т. д.).

SharpDisasm — это полный порт C# либудис86 Дизассемблер 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]

Некромантия, ведь прошло довольно много времени.
Да, на самом деле их несколько.

Capstone.NET практически полностью укомплектован (libcapsone-port ARM, ARM64 (он же ARMv8/AArch64), M68K, Mips, PowerPC, Sparc, SystemZ, XCore, X86 (включая X86_64).Он поддерживает большинство современных расширений ЦП):
https://github.com/9ee1/Capstone.NET
http://www.capstone-engine.org/features.html
(лицензия MIT)

Далее, как уже говорилось, есть SharpDisasm (либудис-порт):
https://sharpdisasm.codeplex.com/
(Упрощенная лицензия BSD (BSD))

Тогда есть Реко (x86-ДЕКОМПИЛЕР)
https://github.com/uxmal/reko
(Универсальная общественная лицензия GNU)

Существует ElfSharp для чтения файлов ELF:
https://github.com/konrad-kruczynski/elfsharp
(Лицензия MIT и LLVM)

Или прочитайте формат 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


Кроме того, в викибуках есть специальная страница:
https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

Еще есть декомпилятор снеговика, использующий Capstone:
https://github.com/yegord/snowman

Также существует полностью управляемый ассемблер x86:https://github.com/meikeric/managed-x86

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top