Я читал компоновщики и загрузчики Джона Р. Левина, и я читал, что свойства объектного файла будут включать в себя одно или несколько из следующего.".o" Файлы "loadable"?
- файл должен быть связываемый
- файл должен быть загружаемым
- файл должен быть исполняемым
Теперь, принимая во внимание этого примера:
#include<stdio.h>
int main() {
printf("testing\n");
return 0;
}
который я бы компилировать и связь с :
$ gcc -c t.c $ gcc -o t t.o
Я попытался проверить t.o
с помощью objdump
и его тип отображается как REL
. Что удовлетворяют все свойства t.o
? Я считаю, что его связываемый, неисполняемый. Я бы поверила, что он не загружается (если вы не создаете файл .so из файла .o); однако тип REL
означает, что его предполагается переместить, и перемещение произойдет только в контексте загрузки, поэтому у меня возникает путаница. Мои сомнения резюмировать: -
- ли ".o" файлы
loadable
? - Чтение ресурсов, касающихся разделов, присутствующих в файле «.o», «.so» - различия и т. Д.?
программой bootstrap, вы имеете в виду libc_start_main? –
@eQuiNoX__ Я имею в виду код, который обычно находится (до связывания) в файле, который называется «crt0.o», хотя современные линкеры могут фактически содержать код внутри. –
Обычно символ _start –