2015-11-15 18 views
6

InCalcolo il file di offset di un punto di ingresso in un file PE

http://en.redinskala.com/finding-the-ep/

ci sono informazioni su come trovare il file offset del punto di ingresso in un file exe.

Qui posso leggere quel

EP (File) = AddressOfEntryPoint - BaseOfCode + .text [PointerToRawData] + FileAlignment

Tuttavia, quando ho calcolo di questo io (ho usato un paio di file exe diversi) Sono giunto alla conclusione che

Offset del punto di ingresso nel file EXE = AddressOfEntryPoint + .text [Pointe rToRawData] - .text [VirtualAddress]

Dove AddressOfEntryPoint prelevato dalla IMAGE_OPTIONAL_HEADER e gli altri due valori dalla IMAGE_SECTION_HEADER.

Le informazioni su tale pagina Web sono false? Aggiungendo FileAlignment come fanno solo sembra sbagliato, non ha senso. O lo fa? Un allineamento di file suggerisce che dovrei usare modulo o qualcosa per calcolare un valore. Se BaseOfCode e FileAlignment hanno lo stesso valore (per lo più sono), non disturberanno l'aggiunta al calcolo, ma come avrebbe senso?

+0

Avrei dovuto rileggere la specifica PE, ma l'aggiunta di file sembra davvero sbagliata. Se l'offset non allineato è 'x', andrei per' x - x% FileAlignment'. –

risposta

2

Corretto, non è necessario utilizzare il valore FileAlignment.

L'algoritmo dovrebbe essere qualcosa di simile a come segue (molto simile al tuo):

  • Get AddressOfEntryPoint da IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint (questa è una VA)
  • Cerca in quale sezione di intestazione questo risiede VA (di solito il primo, ma dovresti davvero cercare in tutte le intestazioni di sezione).
  • Una volta ottenuta l'intestazione di sezione corretta, ottenere i campi VirtualAddress e PointerToRawData.
  • Sottrai VirtualAddress da AddressOfEntryPoint: ora avete un "delta"
  • Come esattamente lo stesso delta vale per gli offset, quindi: aggiungere "delta" a PointerToRawData.

Semplicemente non è necessario FileAlignment perché la sezione in cui si trova il punto di ingresso è già allineata su tale valore.

Problemi correlati