Отличная публикация psoul отвечает на ваш вопрос, поэтому я не буду повторять его хорошую работу, но я чувствую, что это поможет объяснить, почему это одновременно совершенно правильный, но также и ужасно глупый вопрос. В конце концов, это место для изучения, верно?
Современные компьютерные программы производятся путем серии преобразований, начиная с ввода понятного человеку текста текстовых инструкций (называемого «исходным кодом») и заканчивая машиночитаемым набором инструкций (называемых альтернативно «двоичным» или «машинным»). код").
Способ, которым компьютер выполняет набор инструкций машинного кода, в конечном итоге очень прост. Каждое действие, которое может выполнить процессор (например, чтение из памяти, добавление двух значений), представлено числовым кодом. Если бы я сказал вам, что цифра 1 означала крик, а цифра 2 означала хихиканье, а затем поднял карты с цифрами 1 или 2, ожидая, что вы будете кричать или хихикать соответственно, я бы использовал ту же систему, что и компьютер. работать.
Бинарный файл - это просто набор этих кодов (обычно называемых «кодами операций») и информацией («аргументами»), на которые действуют коды операций.
Теперь ассемблер - это компьютерный язык, где каждое командное слово в языке представляет ровно один код операции на процессоре. Существует прямая трансляция 1: 1 между командой на языке ассемблера и кодом операции процессора. Вот почему сборка кодирования для процессора x386 отличается от сборки кодирования для процессора ARM.
Разборка - это просто: программа читает двоичный код (машинный код), заменяя коды операций эквивалентными командами на языке ассемблера, и выводит результат в виде текстового файла. Это важно понимать; если ваш компьютер может читать двоичный файл, то вы также можете прочитать двоичный файл, либо вручную с таблицей кода операции в руке (ick), либо через дизассемблер.
У дизассемблеров есть некоторые новые приемы и все такое, но важно понимать, что дизассемблер - это, в конечном счете, механизм поиска и замены. Вот почему любое EULA, которое запрещает это, в конечном счете дует горячим воздухом. Вы не можете сразу разрешить компьютеру читать данные программы, а также запретить компьютеру читать данные программы.
(Не поймите меня неправильно, были попытки сделать это. Они работают так же, как DRM для файлов песен.)
Тем не менее, существуют предостережения в отношении подхода к разборке. Имена переменных не существуют; такая вещь не существует для вашего процессора. Библиотечные вызовы запутаны до чертиков и часто требуют разборки дополнительных двоичных файлов. И сборка трудна для чтения в самых лучших условиях.
Большинство профессиональных программистов не могут сидеть и читать на ассемблере без головной боли. Для любителя это просто не произойдет.
Во всяком случае, это несколько затуманенное объяснение, но я надеюсь, что это поможет. Каждый может смело исправлять любые искажения с моей стороны; Прошло много времени. ;)