Impila l'intervallo di posizione su linux per il processo dell'utente

3

In Linux, con ASLR abilitato, esiste un intervallo di indirizzi in cui risiede l'indirizzo dello stack utente? Che dire di heap, indirizzi di istruzioni (sezione di testo)? In generale, è possibile guardare un indirizzo e dire se è per i dati o per il codice?

Sto provando a scrivere un Pintool che guarda l'EIP dopo un ritorno e controlla se l'EIP punta a un'area dati. Supponiamo che NX non sia abilitato su questo sistema.

    
posta abjoshi 06.05.2018 - 11:42
fonte

2 risposte

1

Sì, c'è un intervallo e puoi determinare quell'intervallo in modo banale per qualsiasi processo in esecuzione. Leggi un dato processo ' /proc/<pid>/maps per vedere il suo layout di memoria, così come il tipo di memoria in ogni intervallo di indirizzi. Questo è descritto in proc(5) . Un esempio da un dispositivo incorporato:

root@UP-7197:~# cat /proc/self/maps
00400000-0044b000 r-xp 00000000 1f:02 944        /bin/busybox
0045b000-0045c000 rw-p 0004b000 1f:02 944        /bin/busybox
77450000-77472000 r-xp 00000000 1f:02 802        /lib/libgcc_s.so.1
77472000-77473000 rw-p 00012000 1f:02 802        /lib/libgcc_s.so.1
77474000-77506000 r-xp 00000000 1f:02 891        /lib/libc.so
77513000-77514000 r--p 00000000 00:00 0          [vvar]
77514000-77515000 r-xp 00000000 00:00 0          [vdso]
77515000-77517000 rw-p 00091000 1f:02 891        /lib/libc.so
77517000-77519000 rwxp 00000000 00:00 0
7fc55000-7fc76000 rw-p 00000000 00:00 0          [stack]

La sintassi è spiegata over at Stack Overflow .

    
risposta data 06.05.2018 - 14:19
fonte
0

Sì, è generalmente possibile indovinare, dove iniziano e finiscono le diverse sezioni, anche se potrebbe non essere perfettamente affidabile. Per ulteriori informazioni su come un processo è strutturato in memoria, leggi il formato ELF .

    
risposta data 06.05.2018 - 14:11
fonte

Leggi altre domande sui tag