【发布时间】:2022-01-19 05:13:43
【问题描述】:
我正在尝试弄清楚如何访问链接器在运行时生成的 build-id。
从此页面,https://linux.die.net/man/1/ld
当我构建一个测试程序时:
% gcc test.c -o test -Wl,--build-id=sha1
我可以看到构建 ID 存在于二进制文件中:
% readelf -n test
Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 85aa97bd52ddc4dc2a704949c2545a3a9c69c6db
我想在运行时打印它。
编辑:假设您无法访问加载运行进程的 elf 文件(权限、嵌入式/无文件系统等)。
编辑:接受的答案有效,但链接器不一定必须将变量放在该部分的末尾。如果有办法获得指向节开头的指针,那就更可靠了。
【问题讨论】:
-
你试过内联汇编吗?
-
不,但现在我很感兴趣
-
您的回答完全不能保证有效。 “链接器将其放置在...之后立即”或者它可以将其放置在之前。此外,
--build-id可以是SHA1,或MD5,或任意十六进制值。 -
我在所有示例中都使用了 -Wl,--build-id=sha1
-
请回答您自己的问题并接受它,而不是回答问题中的问题。
标签: c gcc linker elf linker-scripts