Dopo aver rebasato il programma principale molto in alto nella propria imagebase.C++ Come controllare Image Base dell'API LoadLibrary
Come posso garantire che la DLL che viene caricato verrà caricato in 0x400000
dllImageBase = LoadLibrary("test.dll");
printf("imagebase = 0x%x", dllImageBase);
Ho sempre trovato 0x460000 invece di 0x400000
Ho bisogno del mio dll prima istruzione di partire da 0x401000, ha usato per inizio alle 0x600000 prima rebasing
comando per linker rebase è
#pragma comment(linker, "/BASE:8000000")
Quindi 0x400000 è in realtà gratuito in questo momento, ma non lo usa per impostazione predefinita .. quindi in qualsiasi modo posso controllarlo, dove dovrebbe trasferirsi. Forse WIN32API?
Come sapete che "0x400000" è gratuito? Qualche altra DLL potrebbe essere lì. –
Ho guardato la mappa della memoria e l'intestazione .code/PE del mio programma parte da '0x8000000' .. e prima che sia' 0x3300000' che è solo sortbls.nls e continua a essere sempre più in basso niente sta usando '0x4000000'. Ma cosa stai dicendo da qualche parte in futuro, si romperà per qualche strano incidente? questo è se capisco come impostare troppo 0x4000000. Poi di nuovo, se in qualche modo capisco come controllare questo, non li ricaricheranno mai più – SSpoke
Non sono a conoscenza di alcun modo per controllarlo. Se il tuo codice dipende da una particolare DLL che vive in un particolare indirizzo, è rotto. Semplice come quello (ad esempio, x64 Windows tenta in particolare di randomizzare gli indirizzi in cui vengono caricate varie DLL come misura di sicurezza). –