2012-05-28 4 views
8

Ich habe eine Adresse im Speicher und ich möchte herausfinden, die Berechtigungen (R/W/X) dieser Speicheradresse.GDB überprüfen Speicherberechtigungen

z.

char *s = "hello"; 

Hier wird das String-Literal "Hallo" im schreibgeschützten Speicher gespeichert. Gibt es beim Ausführen des Programms über gdb eine Möglichkeit, die Berechtigungen für diese Speicheradresse auszuchecken (ob nur Lesen erlaubt ist oder etc)?

+1

Sie können 'info proc mappings' in GDB verwenden, aber Sie erhalten keine Berechtigungen. Sie können '/ proc/PID/maps' betrachten, wobei' PID' die PID Ihres Prozesses ist - dies wird Ihnen die Karten mit ihren Berechtigungen geben. –

Antwort

10

Sie können zunächst feststellen, wo s zu zeigt:

(gdb) print s 
$6 = 0x400dbc "foo" 

und dann finden Sie den Abschnitt, in dem es in:

(gdb) maintenance info sections 
Exec file: 
    `/home/mfukar/tmp', file type elf64-x86-64. 
    ...sections... 
    0x00400db8->0x00400dfb at 0x00000db8: .rodata ALLOC LOAD READONLY DATA HAS_CONTENTS 
    ...more sections... 

und suchen die READONLY Flagge.

Alternativ können Sie in /proc/PID/maps suchen, wobei PID die PID des Prozesses ist, den Sie debuggen, und Sie können mit info proc erhalten.

+0

Ich benutze LLDB, für die der entsprechende Befehl 'Image Dump Sections' ist – DarenW