O segmento de texto é o mapeamento em 0x400000 - está marcado como 'r-x' para legível e executável. O mapeamento em 0x600000 é somente leitura, então é quase certo que a seção ".rodata" do arquivo executável. O GCC coloca os literais de string C em uma seção somente leitura. O mapeamento em 0x601000 é 'rw-', então é provavelmente o famoso heap. Você poderia ter seu executável malloc()
1024 bytes e imprimir o endereço para ter certeza.
Você pode obter um pouco mais de informações encontrando o PID do seu processo e fazendo: cat /proc/$PID/maps
- no meu laptop Arch, que fornece algumas informações adicionais. Ele está rodando um kernel 3.12, então ele também tem /proc/$PID/numa_maps
, e catting isso pode dar uma pequena visão também.
Outras coisas para executar no arquivo executável: nm
e objdump -x
. O primeiro pode lhe dar uma idéia de onde várias coisas estão no mapa de memória, para que você possa ver o que está na seção 0x4000000 em relação às outras seções. objdump -x
mostra cabeçalhos de arquivos ELF entre muitas outras coisas, para que você possa ver todas as seções, com nomes de seção e se elas estão mapeadas em um tempo de execução ou não.
No que diz respeito a encontrar uma explicação por escrito de "o que é onde", você terá que fazer coisas como o google para "layout de memória ELF FILE". Esteja ciente de que o formato de arquivo ELF pode suportar layouts de memória mais exóticos do que normalmente usados. GCC e Gnu ld e glibc fazem suposições simplificadoras sobre como um arquivo executável é apresentado e depois mapeado na memória em tempo de execução. Existem muitas páginas da Web que pretendem documentar isso, mas só se aplicam a versões mais antigas do Linux, versões mais antigas do GCC ou glibc, ou se aplicam apenas a executáveis x86. Se você não tiver, obtenha o comando readelf
. Se você pode escrever programas em C, crie sua própria versão de objdump -x
ou readelf
para se familiarizar com o funcionamento dos arquivos executáveis e o que há neles.