Acessando registros mapeados de memória no gdb

3

Eu estou tentando ler (esperançosamente escrevo também) para os registradores de hardware mapeados na memória em uma máquina virtual qemu usando o gdb (conectado remotamente). Mas simplesmente não está funcionando:

(gdb) p *0x2000000
Cannot access memory at address 0x20000000

Mas se eu fizer login na máquina e fizer

# devmem 0x2000000
0xE321F0D3

Isso funciona bem. Claramente, o gdb não está obtendo suas informações de /dev/mem . Eu habilitei todos os sinalizadores de depuração em tempo de compilação que eu pude pensar, eu posso colocar pontos de interrupção, percorrer o código e os ponteiros de cancelamento de referência associados a um símbolo muito bem. Mas a maioria das anomalias de ponteiro não funcionam.

Para registro, foi assim que lancei o qemu:

qemu-system-arm -M versatilepb -kernel output/images/zImage     \
                -dtb output/images/versatile-pb.dtb             \
                -drive file=output/images/rootfs.ext2,if=scsi   \
                -append "root=/dev/sda console=ttyAMA0,115200 nokaslr norandmaps printk.devkmsg=on printk.time=y"  \
                -nographic -s

onde adicionei nokaslr etc porque achei que faria diferença. Isso claramente não aconteceu. Alguém sabe o que está acontecendo aqui?

    
por lirime 07.02.2018 / 15:07

1 resposta

0

gdb e devmem estão analisando duas coisas diferentes. gdb está a ver a localização 0x20000000 como mapeada no seu processo espaço de endereçamento , que é diferente de processo para processo (tem que ser, ou então arquivos de troca e tabelas de páginas seriam essencialmente inúteis.) devmem está olhando para o arquivo /dev/mem , que olha diretamente para o físico memória.

Por que o espaço de endereço do processo não expõe todos os locais de endereço físico a um processo? A principal razão é que seria uma enorme falha de segurança: você não quer que um processo aleatório seja capaz de ler e gravar dados da memória que eles não possuem (caso contrário, eles poderiam passar por cima da segurança). um href="https://github.com/pavel-a/devmemX/wiki/Using-devmem"> a página devmem coloca , "Alguns endereços físicos são registros de hardware; escrever ou até mesmo lê-los pode causar o seu computador / dispositivo [para] falhar, derreter ou explodir. Você foi avisado! "

    
por 07.02.2018 / 17:52

Tags