我有一个局部静态变量,如下所示:
void function(void) {
static unsigned char myVariable = 0;
...
我使用 readelf 转储符号表,如下所示:
readelf -s myprogram.elf
我得到了符号表,其中包含myVariable
以下内容:
...
409: 00412668 1 NOTYPE LOCAL DEFAULT 16 myVariable.9751
...
我的问题是:变量名称和点后面的数字是什么意思?有没有关于readelf输出格式的详细文档?手册页不包含有关符号表格式的信息,我找不到任何关于此的信息。(我正在使用 Xilinx 的 ARM GNU 工具,但我想,这对于其他平台也是一样的)谢谢!
这不是
readelf
' 输出的产物;myVariable.9751
真的是那个符号的名字。为了区分定义在不同作用域/函数中的静态变量,编译器必须以某种方式装饰它们的名称:请注意,点 (
.
) 不能在 C 中用作标识符的一部分,因此var.num
不会与用户定义的任何其他变量发生冲突。至于 readelf 文档,除了手册页和阅读源代码之外没有太多其他内容;但您也可以使用
objdump -tT
代替readelf -s
; 也许你会发现它的手册页更好。