Com $p
o pid do processo:
while IFS='- ' read a b z; do
dd bs=4096 skip="$((0x${a%???}))" count="$((0x${b%???}-0x${a%???}))" \
if="/proc/$p/mem" 2> /dev/null > "$a-$b"
done < "/proc/$p/maps"
Você pode querer suspender o processo primeiro para obter um resultado consistente.
Isso despeja cada região da memória em arquivos separados que você pode usar string
on.
Alguns sistemas impedem que os processos inspecionem a memória de outros processos (mesmo do mesmo usuário) por padrão (veja o documentação do kernel para mais informações).
Nesses sistemas, você terá que executar o acima como root
ou desativar essa restrição (não recomendado permanentemente):
sysctl -w kernel.yama.ptrace_scope=0