Есть ли полезная утилита 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

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

  • Определить имя статической / динамической библиотеки
  • В чем преимущество архивирования объектных файлов C в статической библиотеке (файл .a)?
  • как создать kernel-tools-4.2.xx.rpm и kernel-ltools-libs-4.2.xx.rpm
  • Ошибка компиляции драйвера USB
  • Использование Mesa v18.0.5, но только получение OpenGL v3.0
  • Какие библиотеки существуют для чтения / редактирования ID3 mp3?
  • Ищете ресурсы: например, C doc для чтения файлов и их атрибутов? (В Linux)
  • Как читать с другого терминала?
  • Почему мой stdbool.h не входит в / usr / include?
  • Как решить эти проблемы при установке OIS?
  • Где исходный код реализации «scanf»?
  • Linux и Unix - лучшая ОС в мире.