Después de volver a basar el programa principal en su propia base de imágenes.C++ Cómo controlar la base de la imagen de LoadLibrary API
¿Cómo garantizar que el archivo DLL que se carga se cargará en 0x400000
dllImageBase = LoadLibrary("test.dll");
printf("imagebase = 0x%x", dllImageBase);
Siempre me 0x460000 en lugar de 0x400000
necesito mi primera instrucción DLL que empezar desde 0x401000, que solía comenzará a 0x600000 antes rebase
Comando de enlazador a rebasar es
#pragma comment(linker, "/BASE:8000000")
Entonces, 0x400000 es actualmente gratis, pero no lo usa de manera predeterminada ... así que de cualquier forma puedo controlarlo, donde debería reubicarse. Algunos WIN32API tal vez?
¿Cómo se puede saber que '0x400000' es gratis? Algún otro DLL podría estar allí. –
Miré el mapa de memoria y el encabezado .code/PE de mi programa comienza en '0x8000000' .. y antes de' 0x3300000' que es solo sortbls.nls y cada vez es más y más bajo, nada realmente está usando '0x4000000'. Pero lo que dices en algún lugar en el futuro se romperá por algún extraño accidente, sí? eso es si me explico cómo configurar demasiado 0x4000000. Luego, de nuevo, si de alguna manera descubro cómo controlar esto, nunca volverán a cargar allí. – SSpoke
No conozco ninguna forma de controlar eso. Si su código depende de una DLL particular que vive en una dirección particular, está roto. Tan simple como eso (p. Ej., X64 Windows específicamente intenta aleatorizar las direcciones en las que se cargan varias DLL como medida de seguridad). –