2012-05-28 2 views
8

J'ai une adresse dans la mémoire et je veux trouver les autorisations (r/w/x) de cette adresse de mémoire.GDB examine les autorisations de mémoire

E.g.

char *s = "hello"; 

Ici, la chaîne littérale "hello" est stockée dans la mémoire morte. Lors de l'exécution du programme via gdb, existe-t-il une possibilité de vérifier les autorisations pour cette adresse mémoire (que seule la lecture soit autorisée ou non)?

+1

Vous pouvez utiliser 'info proc mappings' dans GDB, mais il ne vous donne pas les permissions. Vous pouvez regarder '/ proc/PID/maps', où' PID' est le pid de votre processus - cela vous donnera les cartes avec leurs permissions. –

Répondre

10

Vous pouvez d'abord trouver où s pointe vers:

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

puis trouver la section dans laquelle il est en:

(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... 

et chercher le drapeau READONLY.

Vous pouvez aussi regarder dans /proc/PID/mapsPID est le pid du processus que vous déboguez et vous pouvez obtenir avec info proc.

+0

J'utilise LLDB, pour lequel la commande équivalente est 'Sections de vidage d'image' – DarenW

Questions connexes