Eu tenho uma variável estática local, algo assim:
void function(void) {
static unsigned char myVariable = 0;
...
Eu despejo a tabela de símbolos usando readelf da seguinte forma:
readelf -s myprogram.elf
e recebo a tabela de símbolos, que contém myVariable
o seguinte:
...
409: 00412668 1 NOTYPE LOCAL DEFAULT 16 myVariable.9751
...
Minha pergunta é: o que significa o número após o nome da variável e o ponto? E existe alguma documentação detalhada sobre o formato de saída do readelf? A página man não contém informações sobre o formato da tabela de símbolos e não consigo encontrar nada sobre isso. (Estou usando as ferramentas ARM GNU da Xilinx, mas acho que isso é o mesmo para outras plataformas também) Obrigado!
Isso não é um artefato da
readelf
saída de ;myVariable.9751
é realmente o nome desse símbolo. Para distinguir variáveis estáticas definidas em diferentes escopos/funções, o compilador precisa decorar seus nomes de alguma forma:Observe que o ponto (
.
) não pode ser usado em C como parte de um identificador, portantovar.num
não colidirá com nenhuma outra variável definida pelo usuário.Quanto à documentação do readelf, não há muito mais além da página man e da leitura do código-fonte; mas você também pode usar
objdump -tT
em vez dereadelf -s
; talvez você encontre sua página de manual melhor.