Sto cercando un po 'di direzione nello scrivere un compilatore. Ho scritto in Common Intermediate Language
, C#
e vari altri linguaggi .NET; Ho scritto il mio Metadata Parser e ora sto cercando di capire i vari aspetti del layout Portable Executable ( PE
). Una cosa che mi disturba in qualche modo è la sezione .reloc
.
Ho l'analisi di Relocs (o almeno penso di sì? :) e volevo sapere, all'interno delle librerie .NET di solito hanno un blocco Reloc singolo con un singolo HighLow ( IMAGE_REL_BASED_HIGHLOW
, o solo 3
) riposizionare a un determinato offset che cambia. Quando scrivo le mie sezioni PE Header e COFF, come posso calcolare Relative Virtual Address
del blocco e Offset
(inferiore a 12 bit) sulla voce TypeOffset
che segue l'intestazione del blocco?
Attualmente sto usando il pecoff_v83.docx ( Eseguibile portatile di Microsoft e Common Object File Format Revisione 8.3 ) dal sito Web di Microsoft, ma penso che ci sia un passaggio che mi sto perdendo.
Collegherò un post pertinente: Come si accumulano le rilocazioni della base PE ?
^ Questo mi ha aiutato ad analizzare le voci di Reloc, ma analizzando e generando i dati che ci sono dentro sono domande diverse.