gpt4 book ai didi

c - 在 macOS 上的链接时获取 __TEXT 部分的大小

转载 作者:行者123 更新时间:2023-12-04 16:41:55 26 4
gpt4 key购买 nike

使用 gold 和其他链接器,可以让链接器使用链接器脚本将 .text 部分的开始/结尾作为常量写入二进制文件,例如

PROVIDE_HIDDEN(linker_script_start_of_text = ADDR(.text));
PROVIDE_HIDDEN(linker_script_end_of_text = ADDR(.text) + SIZEOF(.text));

链接到 ld -Tmy_linker_script.lds ...

我知道可以调用 getsectdata或类似于获取有关 .text 部分的信息或从 mach-o header 解析它,但是有没有办法让链接器将此数据作为常量插入?

最佳答案

您可以使用 __asm 使 Darwin 链接器插入此数据:

#include <stdio.h>

extern int start_text __asm("section$start$__TEXT$__text");
extern int end_text __asm("section$end$__TEXT$__text");

int main() {
size_t text_section_size_bytes =
(intptr_t)&end_text - (intptr_t)&start_text;

printf("__TEXT.__text section size: 0x%lx\n", text_section_size_bytes);

return 0;
}

在我的机器上,打印出:

$ clang -o test ./test.c
$ ./test
__TEXT.__text section size: 0x43

这与 objdump 报告的内容相匹配:

$ objdump -h ./test
./foo2: file format Mach-O 64-bit x86-64

Sections:
Idx Name Size Address Type
0 __text 00000043 0000000100000f30 TEXT
[...]

您还可以使用语法 segment$start$__TEXT/ 来获取整个(相对于部分)的大小段$end$__TEXT.

关于c - 在 macOS 上的链接时获取 __TEXT 部分的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079951/

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