Você pode usar o gdb para acessar a memória de um processo.
Além disso, você deve dar uma olhada no sistema de arquivos "/ proc" - ele contém pseudo-arquivos para cada processo; alguns deles podem conter informações interessantes
Estou usando um banco de dados redis e gostaria de explorar o conteúdo da RAM que o aplicativo está usando.
Eu sinto que a explicação do porquê eu quero fazer isso fará mais sentido do que a pergunta que eu faria.
O Redis é um armazenamento de valor chave simples que armazena dados binários. Eu acho que seria um bom lugar para explorar coisas como codificação e seria interessante para mim fazer coisas como navegar pela RAM procurando por conjuntos binários de dados, fazendo coisas como procurar por padrões simples; talvez explore a ideia de escrever uma linguagem de consulta para bebês que pesquisou na RAM.
Eu tive essa ideia depois de ler o capítulo SICP sobre as linguagens de consulta.
Alguma ideia sobre por onde começar? Inicialmente, eu quero perguntar "Dê-me o espaço de endereço que esta aplicação está executando, por favor" para o sistema.
cat /proc/[pid]/maps
de acordo com os manpages do proc.
Parece o que você quer. Se você precisar do pid, pegue o ps ou qualquer outra ferramenta.
Isso aborda a localização do espaço de endereço em uso. Um dos bolsistas da defcon no ano passado implementou o createremotethread no linux. Então você pode fazer isso ... então leia memória arbitrária dessa maneira.
Agradecemos a psusi por apontar que pmap -x [pid]
é mais fácil de ler.
Use um depurador, é para isso que eles servem.
Se você quiser fazer o seu próprio, tudo passa por ptrace
.
Você pode ver o mapa de memória de um processo (o índice da memória) em /proc/$pid/maps
e ler todo o conteúdo da memória em /proc/$pid/mem
. Você não pode simplesmente abrir esse último arquivo normalmente, veja Como leio / proc / $ pid / mem no Linux?