Usando o gdb para inspecionar variáveis de ambiente

2

Eu tenho tentado encontrar o endereço da variável de ambiente SHELL em um programa em uma máquina Ubuntu 12.04. Eu desliguei o ASLR.

Encontrei postagens parecidas: Então questione e postagem no blog

Eu tentei usar o seguinte no gdb

 (gdb) x/s *((char **)environ)

mas recebo a mensagem:

 (gdb) No symbol "environ" in current context

Isto não é válido no Ubuntu 12.04? Existe alguma outra maneira de inspecionar o endereço de uma variável de ambiente em um processo usando o gdb?

    
por Jake 19.09.2014 / 20:10

2 respostas

3

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) 
    
por 19.09.2014 / 22:15
3

Em gdb , você pode usar o comando show environment . Também como uma alternativa para examinar o ambiente de um processo é:

$ sed 's/\x0/\n/g' /proc/<PID>/environ

O comando sed é necessário para converter os separadores NUL em novas linhas para legibilidade.

A vantagem de qualquer uma dessas abordagens (além da simplicidade) é que não importa se sua tabela de símbolos é removida ou não: -)

    
por 19.09.2014 / 21:09