Возможно тему нужно было писать в форуме Бегинеров или Юникса, но всеж лучше сюда. Нужно по хорошему подробное описание процесса загрузки системой файлов ELF и PE (для Виндоса), а еще лучше было бы в сравнении. Принимаются ссылки, краткие и четкие ответы на языке русском или англицком. По PE я много полезного нашел в статьях про упаковщики (сайту этому спасибо огромное). Хотя там это всё оч разбросано. А про Юниксы ничего не нахожу. Сам я небольшой любитель Linux, так что извиняйте если что не так, но формат ELF знаю неплохо. Если большая разница в версиях Линукса, то интересует МСВС или RedHat. Всё это нужно для дипломного проекта. Помогите плиииз...)
Да на кой хвост мне формат файла ELF нужен? Я его знаю. Мне нужна последовательность загрузки файла и его выполнения. Ну допустим в самом файле указывается - что будет выполнять динамичесское связываение, сказано, что имена будут из стринг-табеля браться, а дальше что? А перед этим что? Причем тут формат? Мне выжно как его система загружает и выполняет, причем от начала и до конца. начиная с самого запуска, потом выделение памяти и тд. Что в системе и что делает и в какой последовательности! Вот примерно то, что мне нужно, но и то тут не всё, а лишнего очень много! http://www.wasm.ru/article.php?article=packers2 Ну с PE я еще переживу, кое что есть, а с EFL совсем плохо. А раздел я верно выбрал. В каком разделе была статья - в такой и написал вопрос. ((
Уже значительно лучше. Спасибо. А теперь бы еще в двух словах - последовательно что делается (просто если кто знает и коротенько может написать по тому что выслали можно в принципе и понять) а теперь бы еще как работает прога-интерпритатор отвечающая за динамическое связывание - было бы вообще замечательно.
Слушай, вообще-то есть гугл... Я уж не знаю, как ты искать умеешь... The program header table has the information needed to locate the segments of the file that contains data required to create a process image. The program header has an entry for each segment that is specified, among other information: location and type. The segment type specifies the purpose of the segment and how it can be used by the loader. For the aim of this brief overview, we are interested in: PT_LOAD, PT_DYNAMIC and PT_INTERP segments. LOAD segments are mapped in the process memory image. They include text of executable files, data and so on. DYNAMIC segments include references to other ELF files that will be loaded into the process image. These entries, are usually (but not exclusively) related to dynamic libraries. The INTERP segment (that appears only once), contains the reference of an interpreter, a program that allows ELF executable files to load shared object dynamically at run-time. The system retrieves the interpreter and maps it in the process image. The interpreter provides the process of an environment, and takes care to load dynamic segments. Since the interpreter is loaded into a new process image, it is executed in user space. The section header table instead has the information required to locate the sections of the file which are used for linking. The section header table has an entry for each section that specifies the offset, the size of the section and the type of section. The program header table is required for executables and shared object files and is optional for relocatable files. On the other hand, the section header table is required for relocatable objects and is optional for executable files and shared objects. Moreover, from inspecting executable files generated using the gcc compiler, we noticed that executable files always have a section header which is always found at the end of the file.
Ну для этого гугл не нужен - это есть на этом сайте в документах. Я же и спрашивал - как работает этот интерпретатор. Уж если на то пошло, то просто кинь мне его исходник. У меня просто Линукса на компе нету..( Просто я думал, что есть статейка какая нибудь по сравнению процесса загрузки Линукс и Виндос. Ну а на нет и суда нет. Буду разбираться сам. Чтож поделаешь.
Я кстаи пишу всё время - меня интересует как проходит ПРОЦЕСС загрузки. А ты меня опять в описание формата тыкаешь..( The system retrieves the interpreter and maps it in the process image. The interpreter provides the process of an environment, and takes care to load dynamic segments. Since the interpreter is loaded into a new process image, it is executed in user space. Вот всё что написано по теме. Маловато будет..)
Загрузка бывает разная: "прямая" - там все достаточно прозрачно и все расписано в ядре. И через "интерпретатор" (/lib/ld-linux.so.2, который грузит динамические библиотеки), с этим сложнее. Советую обратиться к исходникам glibc/uClibc (там есть сорцы этого интерпретатора), также стоит глянуть в gcrt.s - там есть комментарии про начало выполнения (регистры, параметры, окружение). У red plait'а была статья про загрзуку elf'ов в иду, тоже может помочь. Самый главный спец по загрузке elf'ов - это Eric Youngdale (ericy@cais.com), автор загрузчика . А вообще инете всякой документации много, так что Гугл и еще раз Гугл...
Кстати, да - вот это лень -) Я бы понял ещё, если бы спрашивали про работу лоадера в винде. Такой документации нет (от микрософта). Ито gloomy потрудился и расписал как работает CreateProcess. А по лелексу - это вообще стыдно. Мало того, что документов до усрачки чуть ли не по каждой строчке исходников ядра по десятку хаутушек. Так ещё и сами исходники есть... За 50-60 рублей на базаре можно купить сидюк с 6.2 шапкой, и посмотреть в сорцах.