Путь от Кода до Бинарного Файла

Как же исходный код превращается в бинарный файл, который потом исполняется на компьютере? Не нашёл ни одной статьи, которая описывала бы полный процесс от начала до конца, поэтому я написал данный материал.

Язык программирования низкого уровня

Как же исходный код превращается в бинарный файл, который потом исполняется на компьютере? Не нашёл ни одной статьи, которая описывала бы полный процесс от начала до конца, поэтому я написал данный материал.

При вызовах функций на языке С активно используется стек, который также именуется «стек вызовов». По мере того, как мы вызываем функции, они формируют так называемый «стек кадров». При каждом вызове функции образуется кадр, и эти кадры укладываются в стеке, где под них выделяется место. Далее в кадре из стека выделяется память под переменные и промежуточные значения. В кадре стека также содержится указатель на предыдущий кадр и значение счётчика команд. Та команда, которой оно соответствует, должна быть выполнена, как только кадр будет вытолкнут из стека. Далее давайте дизассемблируем вызовы функций в C, чтобы понять, как устроен стек кадров в ассемблере для ARM.

Здравствуйте, меня зовут Дмитрий. Сегодня я хотел бы рассказать вам про очень интересную игру Turing Complete. Я назвал бы её симулятор разработчика компьютеров. А также мы прямо в этой игре соберем компьютер SAP-1 более известный как компьютер Бена Итера.
Сразу скажу что мне игра очень понравилась. Ну вот знаете иногда про игру все говорят какая крутая игра, а ты в неё поиграешь и думаешь. Ну игра ничего особенного. А иногда встречаются игры про которые никто не говорит особо, но стоит в неё начать играть, как обнаруживаешь что ты просто не можешь от неё оторваться. Как раз эта игра относится ко второму типу. У меня такое было c Factorio я в неё тоже долго не мог перестать играть. Так что возможно я буду чуть-чуть предвзятым.


Должен признать, у меня есть некая особая любовь к классическому DOOM. Несмотря на то, что игре уже 31 год, в нее все еще весело играть самому (хотя и выходит у меня так себе) или просто смотреть на то, как другие в нее играют (вот в этом я показываю себя лучше); и поскольку исходный код игры открыт, ей можно наслаждаться на любой современной платформе — ПК, смартфон, камера, осциллоскоп — да и вообще на любой вещи, которая придет вам в голову. В результате чего, благодаря ряду обстоятельств, я оказался меинтейнером нескольких связанных с DOOM пакетов в Fedora Linux.
Итак, за несколько месяцев до нового релиза, проект Fedora Linux осуществляет массовую сборку всех пакетов. Это имеет несколько преимуществ — позволяет убедиться в совместимости ABI, обновить статически линкуемые зависимости, использовать новые оптимизации компилятора и так далее. Как бы то ни было, с приближением релиза Fedora Linux 42 в середине апреля, пришло время для массовой пересборки, и как часто бывает, не все пакеты выжили. Одним из пакетов, которые не удалось собрать оказался chocolate-doom.

Компилятор и главный репозиторий: GitHub
Здесь я напишу о своём личном проекте — компиляторе к C-подобному языку. Я не являюсь профессиональным разработчиком, изучал эту тему почти самостоятельно и не читал никакие книги по написанию компиляторов (но читал по операционным системам).

Программирование — это не только алгоритмы и логика, но и удивительное разнообразие синтаксиса языков. Работая над новым средством подсветки синтаксиса для llamafile, разработчик Justine Tunney* исследовала 42 языка программирования — от классического C и экзотического Tcl до мощного Ruby.
Justine делится своими открытиями о том, насколько причудливым и непредсказуемым может быть лексический синтаксис. Например, триграфы в C — устаревший инструмент для поддержки клавиатур с ограниченными символами, фиксированные длины строк в FORTRAN, вложенные комментарии в Haskell или строки с двойными квадратными скобками в Lua. Ruby вообще оказался чуть ли не самым сложным языком для подсветки из-за его контекстно-зависимого синтаксиса.
Под катом вы найдете описание разработки инструмента подсветки и исследование того, как языки программирования решают одни и те же задачи по-разному. Если вам интересны синтаксис, языковые особенности и сложности лексического анализа – эта статья для вас.
*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис

Устало опускаю продолжение своего текста на Хабре “Остаюсь искренне ваш старпер и startuper" . Многие печали случились за прошедшие три года. На их фоне досада о зависших $20 членского взноса (я успел только взглянуть на dev console) в Google Play Market - шкурный, где-то даже непорядочный, пустячок. О котором нет-нет вспоминается только в дни, когда и десятая его часть, деликатно выражаясь, могла бы согреть кринжу не только душу.. Но “забыть, наплевать, растереть”!
Я - живой. “ «Хорошая жена, хороший дом – что еще надо человеку, чтобы встретить старость.”?! Да самую малость.
“Закрыть..” Слово “гештальт” мне не нравится. Есть в нём что-то опереточно “великосветское”, неизвестное и чуждое в уездном уральском городке.
“Закрыться”. Лучше, но всё ещё не то...
“Отпустить”. С любовью и благодарностью. Вот. Годится..
Существует легенда, авторство которой я так и не смог нагуглить.(Уж не сам ли я её, чего доброго, придумал?) Эта легенда гласит о том, что, якобы, в 1991-ом году в московскую компанию ДОКА обратился некий заграничный аноним (из Европы или США) с техзаданием на разработку игры “в железную дорогу”.
Игра получилась и хорошо разошлась на bbs и дискетах. Мне она попалась десятью годами позже в версии 2.0 о чём, более чем излишне подробно в ВК здесь.
По индустриальным меркам геймплей игры тянет разве что на “удовлетворительно”. Рядовая игрушка “на щелбаны”. Но “святые угодники”! Как красиво (v.1.5), грамотно (v 2.0) сделано внутри! И если от “акробатических этюдов” А.Снегова захватывает дух, а аккуратность А.Ефремова вызывает почтение, то КАК? Кааак!? Как вряд ли когда-либо толкавшая пальцем обесточенные паровозики Людмила Чуринова вышла на artwork в стиле ДетГиз лубка?! Потрясающее попадание в эпоху и возраст самодельных проволочных телефонов, телеграфов Морзе и проносящихся мимо в клубах паровозного дыма литерных поездов!
Мы сидели с друзьями на зимней сессии и готовились к экзамену по основам алгоритмизации и программирования. Экзамен состоял из двух частей: тестовая часть и практика. Тестирование у нас обычно проводится с использованием MyTestX. Это примитивное ПО для проведения компьютерного тестирования. Тем не менее почти на любом экзамене или зачете у нас используется именно эта программа.
И тут один из моих друзей говорит: "А давай взломаем MyTest". Мысли о взломе различного ПО у нас возникали часто, но обычно в виде шутки. Но в данном случае я подумал, а почему бы и нет? Вряд ли разработчик при создании своего творения озаботился о безопасности или обфусцировал свой код. Под взломом я подразумеваю изменение некоторых байтиков в программе, чтобы проходить тесты на высокие баллы. Как окажется в дальнейшем, я был прав, и мне удастся довольно просто сделать так, чтобы результаты моих тестов были безупречными.


Это еще одна статья про демосцену, сайзкодинг, ассемблер, MS‑DOS и ретрокодинг. То есть, о том, как ночами напролет добровольно и бесплатно писать бесполезный и очень трудоемкий код, и получать от этого массу удовольствия (и седую бороду). Даже если вы уже пробовали и вам не понравилось, вам все равно стоит почитать. Возможно, вы что‑то делали не так. Например, использовали не те буквы и цифры. А еще тут есть подборка «демок» размером в 256 байт!

Разработка виртуальных машин может быть не только интересным занятием на вечер, но также и полезным приложением при обучении студентов языку ассемблера на предметах ОАиП (основы алгоритмизации и программирования) и ААС (архитектура аппаратных средств). Целью данной статьи станет создание простой стековой виртуальной машины с собственным языком ассемблера, способным выполнять операции условного и безусловного переходов, инкрементирования и декрементирования чисел, загрузки и выгрузки значений в стек. Машина получится минималистичной и будет обладать лишь 10-ью инструкциями, на основе которых можно будет далее вполне корректно создать собственный высокоуровневый язык программирования.

В декабре 2021 года была опубликована статья по взлому фирменного диагностического комплекса. С тех пор появилось новое поколение мотоциклов, которые никого не оставляют равнодушными. Давайте покопаемся у них прямо в мозгах.
Ассемблерные вставки, используемые компиляторами GCC и Clang, опосредуют взаимодействие высокоуровневых и низкоуровневых языков программирования. Это тонкая и коварная штука. Многие попадают в расставленные здесь капканы, зачастую совершенно неожиданно для себя. В сущности, ключевое слово asm можно перевести на C и C++ как unsafe. Почти в любых руководствах по встроенному ассемблеру, в том числе, и на ужасной странице ibilio, которая десятилетиями попадает в самый верх поисковой выдачи, неисправимо фигурируют фундаментальные серьёзные ошибки, а примеры в большинстве своём некорректны. Наиболее опасно, что эти примеры обычно приводят к ожидаемым результатам! Ситуация плачевная. Эта статья — не руководство, а подборка элементарных правил, которые помогут вам избежать самых распространённых ошибок либо отловить их при ревью кода.
Здесь мы сосредоточимся сугубо на расширенном, а не на базовом ассемблере, а правила в этих версиях отличаются. На первом пишут любые инструкции, относящиеся к встроенному ассемблеру, с ограничениями или затираемыми. То есть, имеем токен : в обрамлении asm. Базовый ассемблер — тупой инструмент, который используется сравнительно нечасто, в основном в самом верху файла с кодом или в “голых” функциях. Поэтому злоупотребления базовым ассемблером на практике маловероятны.

Нашего клиента донимали отчёты о вылетах, показывавшие, что его программа ломается на самой первой команде.
Я открыл один из дампов вылета, он оказался настолько странным, что отладчик даже не мог понять, что пошло не так.
Почему я это написал, и как читать статью
Недавно получил от друга такое сообщение:
Знаешь, какая статья была бы реально интересна? Если бы в ней было показано, что именно происходит с твоим кодом в результате оптимизаций.
Я сразу же подумал: «Ну конечно, я знаю тысячу статей и видеороликов на эту тему», но вскоре осознал, что практически во всех таких источниках от читателя требуется знать компьютерный жаргон, внутреннее устройство, промежуточные представления, т.д. Вот какая проблема здесь возникает: те, кто пользуется компиляторами (как, например, мой друг), всем этим не заморачиваются. Их не волнует, каково именно промежуточное представление LLVM, или что такое φ-узел, или какой проход и почему называется «ротацией циклов». Нет, их интересуют (в порядке убывания приоритета) ответы на вопросы: (1) что, (2) почему, (3) как.

Продолжаем цикла статей по работе с расширенным экраном компьютера "Profi". Второй практикум.
В предыдущих статьях была описана структура расширенного экрана компьютера "Profi", работа с файлами в OS CP/M, а так же загрузка и вывод картинки из файла на экран. Теперь давайте рассмотрим методы работы с расширенным экраном и попробуем проскроллировать его.
Статья была опубликована в 2023 году в 44 номере журнала по "Downgrade".
Статья написана в соавторстве с Вадимом Чертковым.

Уважаемые дамы и господа, сегодня я представлю вам еще одно решение одного из челленджей с соревнования по кибербезопасности 1337UP LIVE CTF 2024. Данное задание кардинально отличается от того, что я описывал в предыдущей статье. Сложность в этом случае довольно таки высокая. Но не будем откладывать дела на потом. Идем на страницу с челленджем и приступаем.

Всё вроде должно быть просто
Сцена этого конкретного преступления может показаться неправдоподобной: аномалия производительности, возникающая в простейшем машинном коде. На самом деле, его даже можно назвать чрезмерно упрощённым, ведь он не выполняет никакой полезной работы. Он нужен лишь для того, чтобы продемонстрировать поведение оборудования в образовательных целях.
Но по моему опыту, чрезвычайно простой машинный код — это, на самом деле, один из самых частых источников чего-то странного. Так как мы передаём CPU ограниченное количество крайне специфичных команд без остальной части когда, то упираемся в границы того, что проектировщики оборудования ожидали встретить в реальном мире. В этой ситуации вы с большей вероятностью сможете пощупать границы микроархитектуры, чем в более стандартном сценарии.

А задумывались ли Вы, что можно сделать на ЭВМ «Берёста-4» с объемом памяти ПЗУ 256 байт? Многие из Вас скажут, что можно всего лишь поморгать светодиодом, а я скажу Вам, что можно сделать ЧПУ станок.