newsare.net
Как-то раз я послушал следующее интересное выступление (по-немецки):https://media.ccc.de/v/ds24-394-linux-hello-world-nur-mit-einem-hex-editorВ нём разобрано, как написать про[Перевод] Программа «Hello World» на машинном коде под DOS
Как-то раз я послушал следующее интересное выступление (по-немецки):https://media.ccc.de/v/ds24-394-linux-hello-world-nur-mit-einem-hex-editorВ нём разобрано, как написать программу «hello world» для 64-разрядного дистрибутива Linux в шестнадцатеричном редакторе. Ассемблер здесь не используется, программа пишется непосредственно на машинном коде. Правда, в ней есть издержки на использование ELF.Мне понравилась такая идея, и я решил повторить такой опыт, но немного в иной форме – а именно, под 16-разрядной DOS в реальном режиме. У меня должен был получиться файл в формате COM, а не EXE, так как (на данном этапе) меня интересовал не столько формат файла, сколько кодировка инструкций. В вышеупомянутой лекции, если честно, не сообщается почти никаких подробностей о том, как именно перейти от ассемблерного кода к машинному — поскольку в случае разбора этих тем лекция, пожалуй, растянулась бы на несколько часов. Но здесь я всё разберу подробно, и при этом собираюсь пользоваться только документацией lntel, а также дизассемблировать код в целях верификации.Также мы коротко поговорим о сегментации.В качестве шестнадцатеричного редактора на этот раз воспользуемся hexedit. Читать далее Read more