All streams
Search
Write a publication
Pull to refresh
4
0
Andrey Breeze @security

User

Send message
Да, читал. Честно признаюсь, понравилась и напомнила про COM, поэтому и упомянул.

p.s. Тут проблема немного в другой плоскости, как она видится мне. Я рационализатор. И, понимаете, при использовании описанного подхода мне нужно постоянно помнить о нем, думать об использовании разного рода конструкций. Важное требование: я, разработчик, не хочу об этом помнить. И, если вспомните, то это требование и легло в основу GC в Java. Думаю, было бы справедливо, чтобы при использовании прежних терминов, суть их все же не менялась. auto_ptr в этом отношении ближе, чем все эти кастомные шаблоны.
Bro, были бы вопросы корректными, ответил бы.

p.s. По поводу контейнеров с подсчетом ссылок — так это еще со времен COM длится с его IUnknown. Но только там это было жизненно необходимо, а тут так, поиграться.
Чтобы подрастающему поколению не пришлось ломать ноги об эти велосипеды.
Эм… А чем не угодил auto_ptr и intrusive_ptr (из буста)?
Программа — это последовательность действий. Но и последовательность может иметь изначальные правила, которые являются неотъемлемой частью.

Декларация в заголовке — это также часть программы. Без DOS- и/или PE-заголовка ваш код в EXE тоже работать не будет, так как помимо прочего там важные параметры заданы — такие как выравнивания.

p.s. Я то как раз и не спорю, а пытаюсь показать где именно Вы не правы :)
:) Оставить DOS-заголовок !== выкинуть весь код DOS-программы
Все в жизни складывается «исторически», но это не отменяет причинно-следственную связь. Без DOS-заголовка EXE-файл для системы не является исполняемым, т.е. не является «программой». Поэтому система даже и не попытается что-то запустить не увидев эту комбинацию.

DOS-header — это заголовок DOS-программы (а именно ее декларативная часть), которую содержит в себе любой исполняемый EXE-файл в целях обратной совместимости.

К слову, COM-файлы никаких деклараций не содержат и например минимальная программа может занимать два байта (0xCD 0x20). С EXE это не так.

Таким образом, любой исполняемый файл WIN-программы содержит в себе полезного паразита в виде DOS-программы (заглушки, STUB и т.д.), который в системе DOS преспокойно запускается и завершает обработку исполняемого файла (для DOS все эти PE и далее — просто мусор). А в Windows система считывает offset PE, лежащего в зарезервированном поле DOS-заголовка. Но этот факт не дает права называть DOS-заголовок частью WIN-программы. DOS-заголвок — это часть DOS-программы.

p.s. В конце-концов у того же Luevelsmeyer'а: «For PE-files, it is a MS-DOS 2.0 compatible executable… that output an error message such as „this program needs windows NT“. You recognize a DOS-stub by validating the DOS-header, being a struct IMAGE_DOS_HEADER.»
В рассматриваемом гипотетическом…
А почему система откажется исполнять файлы без сигнатуры MZ в этом случае?
Ok. А зачем DOS-заголовок программе для WIN?
Ох… без MZ ваша «заглушка» и запускаться-то не будет :) Это все (включая MZ) и есть stub-программа… и не важно, есть там потом вывод текста или нет.
Еще по теме: www.wasm.ru/print.php?article=1005005

(и к слову, не надо отделять заголовок DOS от стаб программы).
O RLY? :) первый же пример: «Smallest possible PE file: 97 bytes» начинается с 0x4D 0x5A
Выкинуть полностью стаб не получится, поскольку его наличие — требование ОС Windows (к EXE), которая в свою очередь полна рудиментов и помимо этого.
Спасибо, хороший материал. Странно что не знал о нем. BTW, а каким годом он датируется?
А я вот очень надеюсь что генерации кода по таким картинкам никогда и не будет.
Лапшой из паразитного кода в свое время уже наелся.
Немного не так :) Для подробного разбора тут кое-какие детали упущены, но работа несомненно визуально приятная. Единственный терзающий лично меня вопрос — зачем она?

Для интересующихся темой:

www.zotteljedi.de/pub/pe.txt (LUEVELSMEYER, «The PE file format»)
В хорошее время вы жили видимо. А я вот не готов был тратить свое время просто так — работа для меня была обязательным совмещением приятного (то, чем я занимался) и полезного (денег). Особенно если учесть что на дворе были последствия кризиса (1998-го года) и средняя зарплата у людей не превышала 300 баксов.

Но скажу вам более — любой разумный человек должен быть не в последнюю очередь предпринимателем своей жизни. И если такое валонтёрная трата времени принесет в будущем бОльшую выгоду, нежели традиционный подход, то это весьма похвально. Если же это все в итоге только ради самоутверждения, то грош этому цена.
Значит в статье Вы умышленно слукавили. А что касаемо подхода — мой совет — не увлекайтесь. Пару студентов возможно и согласятся так бездарно провести свое время, но более солидные дядьки просто вас пошлют лесом, и будут правы.
Вообще-то, даже студентам стипендию платят, хоть и смешную.

Information

Rating
Does not participate
Date of birth
Registered
Activity