-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathappunti
29 lines (26 loc) · 2.55 KB
/
appunti
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- Doppia rilocazione su singola istruzione
- Le stampe di debug sono basate sul valore new_addr che ora tiene in conto dello spiazzamento di sezione (.text multiple)
- Lo switch della versione deve essere gestito coerentemente nelle chiamate delle funzioni di libreria (es. la ricerca di simboli o sezioni)
In particolare, la funzione di ricerca delle sezioni preleva la versione corrente dal PROGRAM che potrebbe non essere aggiornato al momento giusto;
la funzione di clonazione delle sezioni, invece, preleva il numero di versione dai parametri.
Gestire coerentemente il cambio di versione nella varibile globale di programma
- Gestire il cloning delle rilocazioni atomicamente in un'unica funzione
- Macro per il tipo di sezione
- Sistemare il flag authenitc sui simboli
- target_insn viene **erroneamente** utilizzato in entrambi i versi semantici, tuttavia l'emitter non lo sfrutta se non da * to CODE
- controllare i nomi delle variabili
- occhio al codice commentato
- non uniformità nei nomi dei field nelle strutture dell'ibr, in particolare opcode_size potrebbe non essere coerente nelle varie strutture
- creare API di stampa degli oggetti dell'IBR
- Il punto di linearizzazione degli indirizzi delle istruzioni è nello switch di versione (viene applicata anche per la versione 0!)
- L'euristica di risoluzione delle jump table è soggetta a crashare nel caso in cui la movimentazione dello start address sia confusa con la movimentazione di dati all'interno di un case statement
- I simboli non inizializzati a zero non finiscono in .bss come da manuale, bensì in COMMON che in hijacker non ha un simbolo esplicito associato; pertanto l'instrumentazione potrebbe fallire a casusa della ricerca di una sezione fantasma
- la funzione di `shrink_section_size` tronca l'intera taglia di sezione nel caso un cui questa non contenga dati, nonostante sia impostata una taglia nell'header corrispondente
- Problema nel caso in cui più funzioni aventi lo stesso nome risiedono come 'static' in file differenti, generando simboli LOCAL uguali che potrebbero essere rilocati direttamente a partire da `.text` per disambiguare i due
- quando il simbolo è una sezione, il campo `offset` del simbolo non è coerente con il campo `offset` della sezione
- verificare cosa succede instrumentando una libreria.a
- gestire i casi di binding diverso da LOCAL, GLOBAL e WEAK, soprattutto verificare l'attuale politica per i WEAK; inoltre esiste il bind UNIQUE
- esistono simboli ti tipo HIDDEN, controllare come li tratta hijacker
Funzioni da controllare
- switch_executable_version
- clone_text_section