Da Apprendimento dellanalisi binaria di Linux di Ryan “elfmaster” O “Neill . A pagina 32, lautore afferma,
I record di riposizionamento per i file ELF a 32 bit sono gli stessi di quelli a 64 bit, ma utilizza numeri interi a 32 bit. Il seguente esempio per il codice del file oggetto verrà compilato a 32 bit in modo da poter dimostrare addendi impliciti, che non sono così comunemente usati a 64 bit. Un addend implicito si verifica quando i record di rilocazione sono archiviati in
ElfN_Rel
strutture di tipo che non “contengono unr_addend
e quindi laddend viene memorizzato nella destinazione del riposizionamento stesso. Gli eseguibili a 64 bit tendono a utilizzare leElfN_Rela
strutture che contengono un addend esplicito . Penso che valga la pena comprendere entrambi gli scenari, ma gli addendi impliciti creano un po più di confusione, quindi ha senso portare luce in questarea.
Che cosè leffettiva definizione di un “addend” ?
Commenti
- english.stackexchange.com/search?q=addend
- Addend + addend, minuend-subtrahend, moltiplicando * moltiplicatore, dividendo / divisore
Risposta
Penso che significhi solo “un numero che” viene aggiunto “, e in questo caso” il numero che “viene aggiunto allindirizzo di caricamento di base ( o indirizzo di caricamento del segmento) per calcolare il puntatore finale per questo riposizionamento “.
Immaginiamo che quando carichiamo il nostro binario in memoria a 0x400000 abbiamo un puntatore a 0x401234 che punta a 0x405678. (Se invece abbiamo caricato il binario a 0x800000, quindi questo dovrebbe puntare a 0x805678, quindi deve essere riposizionato.) Non conosco ELF, ma la mia lettura di questo è che
-
in t l caso implicito la tabella di rilocazione memorizza solo gli offset nel tuo binario, in questo caso 0x1234, e nel nostro binario alloffset 0x1234 memorizziamo loffset di destinazione 0x5678. Pertanto il trasferimento diventa
per ogni indirizzo
A
nella tabella di riposizionamento*(base + A) += base
(Questo è il modo in cui funzionano le tabelle di rilocazione nei file PE.)
-
nel caso esplicito, la tabella di rilocazione memorizza sia loffset nel tuo binario che loffset di destinazione, cioè 0x1234 0x5678. Quindi il trasferimento qui è
per ciascuna coppia di indirizzi
A, B
nella tabella di riposizionamento*(base + A) = base + B
Non so cosa va nel binario con offset 0x1234 in questo caso.
Risposta
- Augend è un termine che indica un numero soggetto ad addizione
- Aggiungi è il numero da aggiungere.
Da Dictionary.com ,
Ti sei mai trovato a fissare un pezzo di carta con” 3 + 4 “Scritto sopra e si è chiesto” qual è il termine corretto per ciascuna di queste due rispettive quantità? “No? Il primo numero è laugend e il numero che viene aggiunto è laddend.
Puoi vedere un grafico di altri termini matematici qui su Wikipedia “s ” Risultati di calcolo “ ,
Perché i termini speciali qui?
- Beh, è probabile perché nellassembly
add rbi, rax
memorizzerà effettivamente il risultato inrbi
. Quindi conoscere il primo argomento non è solo un argomento peradd
ma la destinazione;add rax, rbi
memorizzerà il risultato inrax
. Se invece lassembly è stato visualizzato con gli operatori, avremmorbi += rax
erax += rbi
. - Poiché addend non è sempre un offset, e augend non è sempre la base. Sebbene in questo esempio specifico, “offset” sia molto più appropriato.
-
In questo caso specifico, il termine “offset implicito” può essere trovato nella Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 ,
… solo le voci
Elf32_Rela
contengono unaggiunta esplicita. Le voci di tipoElf32_Rel
memorizza unaggiunta implicita nella posizione da modificare. A seconda dellarchitettura del processore, una forma o laltra potrebbe essere necessaria o più conveniente.Di conseguenza, unimplementazione per una macchina particolare può utilizzare un modulo esclusivamente o uno dei due moduli a seconda del contesto.
Risposta
Addend è semplicemente “un numero da aggiungere a un altro “, secondo Merian Webster .
Commenti
- Era già indicato nella risposta esistente. Potresti aggiungere un po di più alla tua risposta per renderla più informativa.