2011-09-27 4 views
8

Qualcuno ha notato che se si importa un exe come risorsa viene rideterminato e sembra che anche l'intestazione PE venga ricostruita?C++ visual studio 2010 exe ​​in risorsa get Rebased?

Ci sono volte che questo è irritante. Qualcuno sa come disabilitare il rebasing !?

passaggi per riprodurre in C++:

1) compilare un mondo ciao e manualmente il suo indirizzo di base (in proprietà) per Diciamo 0x1000000

2) fare un secondo progetto e comprendono il mondo ciao in risorse. Inoltre, imposta manualmente il suo indirizzo di base come sopra.

3) costruire secondo progetto

4) estrarre l'exe da risorse e verificare con un editor Pe! diventa impostato su 0x400000. Perché?!

+0

secondo le http://msdn.microsoft.com/en-us/library/hh7adf4f.aspx, si potrebbe avere problema con la configurazione: si prega di aggiungere i parametri del linker . Ad ogni modo, penso che ci siano molti programmi che possono rebase PE, quindi magari prendere in considerazione anche di provarli ... –

+0

editbin.exe, per quanto ho capito, è un programma esterno che può essere eseguito dopo la compilazione. La ricostruzione dell'intestazione PE non avrà alcun effetto sulla situazione di cui sopra. Hai perso il punto. – Ray

+4

Né il compilatore di risorse né le API di risorsa sanno nulla dei file EXE. Li trattano proprio come un blob di byte. Di conseguenza, non possono fare nulla per cambiare l'indirizzo di base. Il problema sta altrove. –

risposta

1

Come si include l'EXE come risorsa nel secondo progetto?

Usando queste definizioni:

#define BINFILE 222 
#define IDR_MYFILE 101 

Se mi riferisco l'eseguibile nel mio file RC come punta al file originale, ad esempio:

IDR_MYFILE BINFILE "S:\\mysource\\t1\\Release\\t1.exe" 

Poi, dopo l'estrazione, la mia risorsa EXE incorporata non è rebasato, ma mantiene quello con cui l'ho costruito.

+0

sì. questo è il mio riferimento al file exe. Sto insidiando la mia testa per questo. Cercherò altri motivi, come suggerito da Hans Passant. – Ray

+0

Forse è come lo stai estraendo dal file EXE compilato? Ho usato PE Explorer per estrarre l'exe 1 da exe 2. E ha funzionato. – Joe

+0

ho usato lo stesso studio visivo per esportare il file binario. fare clic con il tasto destro del mouse sul file e selezionare Esporta. dovrebbe essere lo stesso Penso di aver ristretto il problema. Avevo un offuscatore. forse qualcosa è stato lasciato indietro perché questo progetto è piuttosto vecchio. – Ray