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

Попробуйте это:

cd /some/dir && rsync -av --files-from=<(find . -mtime 0 -printf "%p\n") <other stuff>

Это использует Замену Процесса <( ) заменять find команда с именованным FIFO и дает имя того FIFO к rsync читать как, что включать в синхронизацию.

Обновление

В свете ответа Kyle это определенно появляется это --files-from является более соответствующим, чем --include-from; хотя оба будут работать. Ответ обновляется

2
19.05.2017, 03:04
2 ответа

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

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

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

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

1
27.01.2020, 22:14
  • 1
    Это верно. Моя мысль была то, что, если я владел программой, которую я подозревал, имел шпионское ПО в нем, затем в лучшем случае, я хотел бы проанализировать системные вызовы в нем так, я мог найти пятно, где что-то противное делалось. Но я, вероятно, не должен перекомпилировать его для решения проблемы: Если я знал точно, где это, я могу использовать двоичного редактора для перезаписи вызова с NOPs. Было бы хорошо, если бы был инструмент, которые были дизассемблером комбинации и двоичным редактором, как то, где я вижу код asm левых и байтов машинного кода справа в редакторе. –  Asker 24.11.2012, 17:01

Ничего себе, некоторый проект! Но хорошо, некоторые игрушки для проигрывания с:

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

биты:

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

Обязательно проверьте этот вопрос.

1
27.01.2020, 22:14

Теги

Похожие вопросы