gcc(和其他编译器)supportident预处理器指令:
“ident”指令接受一个参数,即字符串常量。在一些
系统中,该字符串常量被复制到
对象文件。在其他系统上,该指令被忽略。“SCC”
指令是“ident”的同义词。
我看到(通过一个十六进制转储)通过将其添加到源文件中:
#ident "Hello there !"
此字符串嵌入到可执行文件中。
现在,是否有任何工具(readelf、objdump、gdb或其他工具)可以提取/查看这些字符串?
最佳答案
如果您安装了rcs,我认为ident
命令将显示它们。这假设您以传统方式格式化它们:$keyword: value $
。
如果没有这个关键字,将ident字符串放入二进制文件的传统方法是将它们放入静态变量中,例如。
static char const rcsid[] =
"$Id: f.c,v 5.4 1993/11/09 17:40:15 eggert Exp $";
问题在于,您会收到有关未使用变量的警告,编译器可能会将它们优化掉。因此,必须在代码中使用变量来防止这种情况。此外,如果ident字符串放在头文件中,它们必须遵循命名约定以避免冲突。
我找不到
#ident
将它们放在何处的规范。我怀疑它们只是停留在纯数据部分的某个地方,这样就可以像上面的字符串一样找到它们。关于c - 访问可执行文件中的#ident信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15773282/