2008-10-08 9 views
9

Tenemos un proyecto con muchos archivos dll que se cargan cuando se inicia la aplicación. La baseaddresses de los archivos dll se superponen para que la imagen de memoria se reubique. ¿Existe la posibilidad de asignar automáticamente la baseaddresses o una forma de calcular una dirección base "buena" para cada archivo dll?¿Cómo puedo configurar/baseaddress en un "buen" valor?

Respuesta

7

Puede utilizar la utilidad REBASE que se suministra con el SDK de la plataforma y con Visual Studio pienso para establecer las direcciones base de un montón de archivos DLL cargados por el appliction

Usted suministro de rebase con una lista de los archivos DLL que conforman su programa, sin incluir los Dlls del sistema, luego realiza una carga ficticia de todas las DLL y les asigna nuevas direcciones base.

Esto se puede realizar como parte de un paso final de compilación.

Hay un artículo el Dr. Dobbs rebase here y un artículo de Microsoft sobre el cambio de base en general here

+1

Descubrí que solo puedo llamar a REBASE.EXE -d -b 0x60000000 * .dll para lograr esto. – frast

3

Si está distribuyendo los archivos DLL, independientemente de cómo haya configurado su dirección de base, siempre hay un riesgo de que otros no DLL escrito por usted se cargan en esa dirección ya (por ejemplo, archivos DLL de ganchos globales).

Además, si usted está construyendo para Vista en realidad se debe usar/DYNAMICBASE para permitir que se produzca, ASLR

Aquí está el enlace de MSDN:. http://msdn.microsoft.com/en-us/library/bb384887.aspx.

Cuestiones relacionadas