Есть ли полезная утилита FOSS для преобразования машинного кода в сборку или даже C?

Если я куплю кусок 32-разрядного или 64-битного программного обеспечения x86, но я не получаю исходный код, и мне нужно изменить программное обеспечение, мне нужно будет преобразовать машинный код обратно на язык высокого уровня или в минимальный код сборки.

Есть ли хорошая утилита для перехода от машинного кода к C?

Я предполагаю, что он попытается определить, была ли скомпилирована программа с компилятором C, в отличие от C ++ или Objective C или чего-либо еще.

Благодарю.

2 Solutions collect form web for “Есть ли полезная утилита FOSS для преобразования машинного кода в сборку или даже C?”

Переход от машинного кода к исходному языку называется декомпиляцией . Разборка (переход от машинного кода на язык ассемблера) может быть выполнена с помощью objdump -d ; objdump является частью стандартного набора средств разработки binutils. Хотя декомпилятор может быть полезным инструментом в этом процессе, декомпиляция кода с целью его изменения и перекомпиляции редко является продуктивным способом изменения поведения программы. Вы потратите много времени на возвращение исходного кода, а исходный код не будет в любой поддерживаемой форме.

Первым шагом в понимании того, как работает программа, являются инструменты отладки. Используйте инструменты, такие как strace и ltrace чтобы узнать, какие вызовы системы и вызовы библиотеки вызывает программа. Используйте отладчик, например Gdb, для выполнения инструкций программы.

Если вам повезет, поведение, которое вы ищете, может быть достигнуто с помощью файла конфигурации или среды. Следующий шаг заключается в подключении к программе и замене нескольких функций вашей собственной версией, используя LD_PRELOAD для связывания библиотеки, определяющей вашу собственную версию этих функций .

Декомпиляция обычно полезна для понимания алгоритмов, используемых программой, например, для записи другой программы с совместимым сетевым протоколом или файловым форматом. Это часто не очень полезный инструмент, когда ваша цель – изменить поведение программы.

Вау, какой-то проект! Но хорошо, некоторые игрушки, чтобы играть с:

(Использовать все с двоичным файлом в качестве первого аргумента.)

биты:

 xxd -b # xxd for hexdump (?): `-b` is `-bits` 

восьмеричное:

 od # octal dump 

шестнадцатеричное:

 hexdump # these two share the hexdump(1) man page hd # symbolic link to hexdump od -t x1 # `-t` for type, `x1` for hexadecimal with 1 byte per integer xxd 

строки:

 strings 

Машинный код:

 objdump -D # object dump: `-D` is `--disassemble-all` 

И последнее, но не менее важное: file

Не забудьте проверить этот вопрос.

  • Как узнать, какие файлы использует Makefile?
  • программирование на C ++ в операционной системе Linux реального времени
  • Как вызвать фрагментацию памяти на встроенном устройстве на базе Linux?
  • Разработка программного обеспечения на Linux
  • Ядро Linux 3.2 syscalls
  • Как я могу узнать, какой файл unistd.h загружен?
  • Как настроить мое окружение таким образом, чтобы была использована правильная (отличная от системы) версия библиотеки
  • Персональные страницы для стандартных библиотек C и C ++ на Fedora 14
  • Чтение файлов .desktop программно
  • Команда, которая отбрасывает строки исходного файла C
  • Поиск зависимостей для скомпилированной программы на C ++
  • Linux и Unix - лучшая ОС в мире.