Я встречал опции -nostartfiles
и -nostdlib
в опциях компиляции gcc.Я, однако, не понимаю, как можно написать код для вышеуказанных опций.Вам нужно написать каждую функцию запуска (например, _start
, __libc_csu_init
и т. Д.)?
Могу ли я получить упрощенный код для обеих этих опций, чтобы понять, как она работает?
Edit :
Также я только что обнаружил, что использование static
вместе с nostartfiles
приводит к segmentation fault
.Простой код c для воспроизведения того же:
#include<stdio.h>
#include<stdlib.h>
void _start()
{
int x = main();
exit(x);
}
int main()
{
printf("Hello world!\n");
return 0;
}
Скомпилировано с использованием:
gcc -nostartfiles -static -o foo foo.c
Выходные данные для вышеуказанного кода - segmentation fault
.Это ожидаемый результат?