gpt4 book ai didi

android - arm-eabi-gcc 如何确保 crtbegin_dynamic.o 中的 ".text"部分在最终动态链接的可执行文件中排在第一位?

转载 作者:行者123 更新时间:2023-11-29 21:02:47 24 4
gpt4 key购买 nike

从readelf我们知道一个ELF可执行文件的入口点在Android(32位ARM)中是“_start”,而“_start”定义在crtbegin_dynamic.S 用于动态链接的可执行文件。

问题是:构建系统如何确保 crtbegin_dynamic.o 中的“.text”部分在 finally 中排在第一位可执行镜像(以便“_start”在最终可执行镜像的“.text”部分排在第一位)?

最佳答案

它由链接器 (ld) 决定,当您使用 gcc 生成可执行文件时,它可能会隐式调用。

首先你应该查看 ld 在 Entry Point 上的文档.

The first instruction to execute in a program is called the entry point.

...

There are several ways to set the entry point. The linker will set the entry point by trying each of the following methods in order, and stopping when one of them succeeds:

  • the `-e' entry command-line option;
  • the ENTRY(symbol) command in a linker script;
  • the value of a target specific symbol, if it is defined; For many targets this is start, ...
  • the address of the first byte of the `.text' section, if present;
  • The address 0.

您可以通过 -Wl,-eXXX 尝试使用链接器的 -e 选项

$ echo "int main(void) {return 42;}" | gcc -Wl,-efoo -xc - -o t42
/usr/bin/ld: warning: cannot find entry symbol foo; defaulting to 00000000004003d0
$ readelf -a t42|grep 4003d0
59: 00000000004003d0 0 FUNC GLOBAL DEFAULT 13 _start

关于android - arm-eabi-gcc 如何确保 crtbegin_dynamic.o 中的 ".text"部分在最终动态链接的可执行文件中排在第一位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25500486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com