Почему вставка символов в исполняемый двоичный файл приводит к его поломке?
И есть ли способ добавить символы, не нарушая скомпилированную программу?
Задний план
Я давно знал, что можно использовать шестнадцатеричный редактор для изменения кода в скомпилированном исполняемом файле, и он по-прежнему будет работать как обычно...
Пример
Например, в приведенном ниже приложении Facebook
можно изменить на Lacebook
, и программа по-прежнему будет выполняться нормально:
Но это ломается с новыми персонажами
Я также знаю, что если будут добавлены новые символы, это сломает программу, и она не запустится, или сразу рухнет. Например, добавление My
перед Facebook
приведет к следующему результату:
Что я знаю
- Я немного поработал с
C
и понял, что код написан в удобочитаемом виде, скомпилирован и связан в исполняемый файл. - Я провел вводное изучение языка ассемблера и понимаю концепции перемещения данных, команд и указателей.
- Я писал небольшие программы для Windows, Mac и Linux.
Чего я не знаю
- Я не совсем понимаю связь между операционной системой и исполняемым файлом. Я предполагаю, что когда вы вводите имя программы и нажимаете клавишу возврата, вы, по сути, даете операционной системе указание выполнить этот файл, что в основном означает загрузку файла в память, установку указателя процессора на него и команду 'Go !'
- Я понимаю, почему наличие лишних символов в текстовой строке двоичного файла может вызвать проблемы.
Что я хотел бы знать
- Почему лишние символы приводят к сбою программы?
- Что определяет, что программа сломана? ОС? ОС также держит эту программу в изолированной программной среде, чтобы в настоящее время она не приводила к сбою всей системы?
- Есть ли способ добавить дополнительные символы в текстовую строку скомпилированной программы через шестнадцатеричный редактор и не прерывать работу приложения?