Я изучаю, как работает компоновщик на Linux. Мне сказали, что компоновщик сгенерирует некоторые символы для исполняемого файла, такие как __executable_start
, который является адресом, с которого запускается программа.
Также я знал, что была точка входа address »в файле ELF.
Так что я не знаю, в чем разница между ними.
Я написал простой код ниже:
#include <stdio.h>
extern char __executable_start[];
int main()
{
printf("Executable Start %X\n", __executable_start);
return 0;
}
Я компилирую с помощью G CC и получить исполняемый файл с именем a.out
.
Когда я его выполняю, он дает мне Executable Start 4CEDA000
.
Затем я выполняю команду readelf -h a.out
и вывод о точке входа: Entry point address: 0x540
Ну, очевидно, 0x540
и 4CEDA000
совершенно разные.