crypt of decay - Post a comment [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

секс и эльфы Aug. 28th, 2020|10:37 am

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

UrForth, как известно всему миру, пока собирается fasm-ом. fasm же умеет делать эльфов-миджетов, хирургическим путём усекая всё лишнее. да, в интернетах типа дохуя таких примеров, но все они делают static linking. а мне надо dynamic, с импортом libdl. и fasm умеет как раз такое. эльф вообще без секций, безо всяких там гот-плт, из четырёх сегментов, минимальней некуда. самое интересное то, что даже таблица импортов (а она у эльфов весьма ебанутая) формируется макросами, написаными на самом фасме, а не захардкоженым обработчиком.

в общем, в таком минимальном виде даже понятно, как оно всё получается. вообще, что эльф, что PE — это упражнения в сферическом ебанатизме: во все стороны торчит легаси, которое приходится носить с обой По Историческим Причинам, незаживающие язвы Гениальных Идей По Будущим Расширениям, и опиздинительно мутированые переусложнённые простые вещи. потому что если делаешь один формат, который может использоваться для хранения нескольких совершенно разных штук — ты уже на этой стадии проебался. и эльф, и pe могут хранить как исполняемые бинари, так и объектные файлы для линкера. при всей соблазнительности идеи: «да это же частные виды одного и того же процесса!» — оно совсем не так. (и это поняли даже авторы, предпочтя в итоге для объектников другие форматы.) что в эльфах, что в pe от такого решения валяются бесполезные ошмётки, которые затрудняют как понимание, так и реализацию. в эльфах, чтобы не было скучно, ещё добавили деление на сегменты и секции — потому что зачем ограничиваться одной сущностью там, где можно ввести две?! в импортах и экспортах вообще адский ад с кучей вариантов, ехал индирект через индирект индирект индирект индирект. это всё настолько уёбищно, что авторам пришлось придумывать механизм внешних загрузчиков: динамические импорты в эльфах обрабатываются не ядерным загрузчиком, а отдельным юзерленд-бинарём, полный путь к которому задаётся в исходном бинаре. иначе, видимо, их уёбищные космосферические фантазии никто реализовывать не хотел. и не надо сказок про: «это же охуеть круто, расширяемость!» это засраный костыль, чтобы говноформат не послали сразу нахуй.

весь этот прискорбный катаклизм от того, что форматы сочиняли ебаные «комитеты». которые завсегда «чтобы расширяемо и универсально», а в итоге выходит намного хуже, непонятней, неудобней и нерасширяемей, чем если бы всю херню сдизайнили один-два инженера без оглядки на идиотов. всё, что дизайнят «комитеты» — говно. если только «комитет» не заставляют стандартизировать то, что уже де-факто используется, и было сделано одним умным человеком (как IEEE floats).

ах, да. а делать новых эльфов с нуля мне вообще в итоге не понадобилось: fasm генерирует такой набор сегментов, который загружает по фиксированому адресу полный оригинальный заголовок файла. в котором достаточно поправить два поля и записать его обратно на диск, добавив следом слепок памяти. и оно заработает. и заработало.

а UrForth уже имеет полноценный ассемблер, да. с поддержкой локальных и глобальных меток в стиле fasm (потому что мне фасмовый код транслировать). правда, однопроходный, поэтому для forward references всегда генерируются длинные варианты команд. похуй, меня устраивает, нет смысла ради этих байтов ебаться с многопроходностью — весь мой асм-код написан в Охуенно Оптимальном Стиле Z80 (я даже сделал частичную поддержку синтаксиса Z80), поэтому самое время оптимайзить переходы, ага.

p.s.: всё это, кстати, затевалось для того, чтобы написать игру на спекки. go figure.
Link Read Comments

Reply:
From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message: