O seu binário foi strip
ped dos seus símbolos? Se assim for, não haverá tabela de símbolos e você não terá esperança de encontrar este símbolo. Você pode descobrir com readelf
- aqui meu hello
binário faz ter sua tabela de símbolos:
$ readelf -S hello | grep -i symtab
[28] .symtab SYMTAB 0000000000000000 000018f8
$
Além disso, quando você executa o GDB, seu programa realmente foi iniciado? Parece que este símbolo não pode ser resolvido até que a tabela de símbolos seja carregada. Ele não será carregado quando você iniciar o GDB pela primeira vez, mas deverá estar no momento em que você acessar main()
. Você pode simplesmente colocar um ponto de interrupção em main()
, run
o programa e, em seguida, inspecionar a variável quando atingir o ponto de interrupção main()
:
Reading symbols from hello...(no debugging symbols found)...done.
(gdb) x/s *((char **)environ)
No symbol table is loaded. Use the "file" command.
(gdb) b main
Breakpoint 1 at 0x4005c8
(gdb) r
Starting program: /home/ubuntu/hello
Breakpoint 1, 0x00000000004005c8 in main ()
(gdb) x/s *((char **)environ)
0x7fffffffe38f: "XDG_VTNR=7"
(gdb)