Vraag Dump het geheugen van een Linux-proces naar bestand


Is het mogelijk om het huidige toegewezen geheugen voor een proces (door PID) naar een bestand te dumpen? Of lees het op de een of andere manier?


46
2017-08-24 17:44


oorsprong


U kunt mijn gebruiken proof-of-concept-script dat leest /proc/$pid/mem. - Gilles
Misschien wil je ook lezen superuser.com/questions/236390/... en gebruik in plaats daarvan gcore. - Simon A. Eugster


antwoorden:


Ik weet niet zeker hoe je al het geheugen naar een bestand dumpt zonder dit herhaaldelijk te doen (als iemand een geautomatiseerde manier kent om GDB te krijgen, laat het me dan weten), maar het volgende werkt voor elke batch geheugen in de veronderstelling dat je het weet de pid:

$ cat /proc/[pid]/maps

Dit zal in het formaat zijn (voorbeeld):

00400000-00421000 r-xp 00000000 08:01 592398                             /usr/libexec/dovecot/pop3-login
00621000-00622000 rw-p 00021000 08:01 592398                             /usr/libexec/dovecot/pop3-login
00622000-0066a000 rw-p 00622000 00:00 0                                  [heap]
3e73200000-3e7321c000 r-xp 00000000 08:01 229378                         /lib64/ld-2.5.so
3e7341b000-3e7341c000 r--p 0001b000 08:01 229378                         /lib64/ld-2.5.so

Kies een batch geheugen (dus bijvoorbeeld 00621000-00622000) en gebruik dan gdb als root om aan het proces te hechten en dat geheugen te dumpen:

$ gdb --pid [pid]
(gdb) dump memory /root/output 0x00621000 0x00622000

Analyseer / root / output met het strings-commando, tenzij je de PuTTY op je hele scherm wilt hebben.


40
2017-08-24 18:39



Is er een manier om dit te doen in gewoon bash / sh zonder gdb? - Programming4life
@ Programming4life gcore (1) - SYS_V


Ik heb een script gemaakt dat deze taak volbrengt.

Het idee komt voort uit het antwoord van James Lawrie en deze post: http://www.linuxforums.org/forum/programming-scripting/52375-reading-memory-other-processes.html#post287195

#!/bin/bash

grep rw-p /proc/$1/maps | sed -n 's/^\([0-9a-f]*\)-\([0-9a-f]*\) .*$/\1 \2/p' | while read start stop; do gdb --batch --pid $1 -ex "dump memory $1-$start-$stop.dump 0x$start 0x$stop"; done

plaats dit in een bestand (bijv. "dump-all-memory-of-pid.sh") en maak het uitvoerbaar

gebruik: ./dump-all-memory-of-pid.sh [pid]

De uitvoer wordt afgedrukt naar bestanden met de namen: pid-startaddress-stopaddress.dump

Bijgebouwen: gdb


41
2017-07-18 17:38



Geweldig! Gewoon gebruikt om te ontdekken welk script een mysterieuze bash-instantie draaide. - Tobia


proberen

    gcore $pid

waar $pid is het werkelijke aantal van de pid; voor meer info zie: info gcore

kan enige tijd duren voordat de dump plaatsvindt, en sommige geheugen is mogelijk niet leesbaar, maar is goed genoeg ... wees je ervan bewust dat het grote bestanden kan maken, ik heb zojuist een bestand van 2 GB gemaakt ..


34
2018-03-09 19:06



is gcore een schaars bestand dumpen? - CMCDragonkai


man proc zegt:

/ Proc / [pid] / mem                 Dit bestand kan worden gebruikt om toegang te krijgen tot de pagina's van een proces   geheugen door open (2), lees (2) en lseek (2).

Misschien kan het je helpen


3
2017-08-24 17:58



Dat is niet voldoende, het lezen van een ander proces vereist een combinatie van / proc / <pid> / {mem, * maps}, ptrace en sommige signaalverwerking om te voorkomen dat het doelproces wordt opgehangen. - Tobu
@Tobu Inderdaad. Ik schreef een proof-of-concept-script. - Gilles


Ik heb mijn eigen programma gemaakt om ook het volledige procesgeheugen te dumpen, het is in C zodat het gecompileerd kan worden naar Android, wat ik nodig had.

U kunt ook een IP-adres en TCP-poort opgeven. Broncode hier.


2
2017-12-27 14:55





Tool om het proces te dumpen naar standaarduitvoer, pcat / memdump:


1
2018-02-04 21:27



Deze is verouderd (verwijderd op verzoek van de beheerder); Ik installeerde het oude pakket toch en het mislukte met "Input / output error; heb je GCC gebruikt met header-bestanden van een andere machine?". - Tobu


U kunt nu procdump uit de SysInternals-suite gebruiken op Linux:

https://github.com/Microsoft/ProcDump-for-Linux 


0
2017-12-07 07:09