2012-05-28 9 views
8

Ho un indirizzo in memoria e voglio scoprire i permessi (r/w/x) di quell'indirizzo di memoria.GDB esamina i permessi di memoria

E.g.

char *s = "hello"; 

Qui, la stringa letterale "ciao" è memorizzata nella memoria di sola lettura. Quando si esegue il programma tramite gdb, c'è la possibilità di controllare le autorizzazioni per quell'indirizzo di memoria (se solo la lettura è consentita o ecc.)?

+1

È possibile utilizzare 'info proc mappingings' in GDB, ma non fornisce le autorizzazioni. Puoi guardare '/ proc/PID/maps', dove' PID' è il pid del tuo processo - questo ti darà le mappe con i loro permessi. –

risposta

10

È possibile prima trovare dove s sta indicando:

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

e poi trovare la sezione in cui si trova 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... 

e cercare la bandiera READONLY.

In alternativa, esaminare /proc/PID/maps dove PID è il pid del processo di cui si sta eseguendo il debug e che è possibile ottenere con info proc.

+0

Sto utilizzando LLDB, per il quale il comando equivalente è 'sezioni di immagine di scarico' – DarenW

Problemi correlati