2012-05-28 16 views
8

Mam adres w pamięci i chcę znaleźć uprawnienia (r/w/x) tego adresu pamięci.GDB sprawdza uprawnienia pamięci

E.g.

char *s = "hello"; 

W tym miejscu ciąg literowy "cześć" jest przechowywany w pamięci tylko do odczytu. Czy przy uruchamianiu programu przez gdb istnieje możliwość sprawdzenia uprawnień do tego adresu pamięci (czy dozwolona jest tylko do odczytu lub itp.)?

+1

Można użyć "mapowania info" w GDB, ale nie daje to uprawnień. Możesz spojrzeć na '/ proc/PID/maps', gdzie' PID' to pid twojego procesu - to da ci mapy z ich uprawnieniami. –

Odpowiedz

10

Można najpierw znaleźć gdzie s jest skierowany do:

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

a następnie znajdź sekcję, w której znajduje się:

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

i szukać flagi READONLY.

Alternatywnie, spójrz na /proc/PID/maps, gdzie PID to pid procesu, który debugujesz i możesz uzyskać z info proc.

+0

Używam LLDB, dla którego równoważne polecenie to "sekcje zrzutów obrazu" – DarenW