Diseño de memoria de aplicación

La siguiente pregunta es un rascador de cabeza para mí. Suponiendo que tengo dos plataformas con un hardware idéntico, el mismo sistema operativo y el mismo comstackdor en él. Si compilo exactamente la misma aplicación, ¿puedo estar seguro de que el diseño de la memoria en ambas máquinas será exactamente el mismo? En otras palabras, ambas aplicaciones tienen exactamente el mismo espacio de direcciones virtuales o existe una alta probabilidad de que este no sea el caso.

Gracias por sus pensamientos sobre esto!

No puedes contar con ello. Como característica de seguridad, algunos sistemas operativos (incluido Windows) aleatorizan el diseño de la memoria en cierta medida.

(Aquí hay un enlace de apoyo: http://blogs.msdn.com/b/winsdk/archive/2009/11/30/how-to-disable-address-space-layout-randomization-aslr.aspx )

Es altamente improbable que una aplicación se ejecute en el mismo espacio de direcciones en la misma plataforma , sin embargo, en otra computadora. Es posible que se estén ejecutando otras aplicaciones, lo que afectará el lugar donde el sistema operativo carga su aplicación.

Otro punto a considerar es que algunas aplicaciones cargan bibliotecas en tiempo de ejecución (también conocidas como DLL y bibliotecas compartidas) a pedido. Una aplicación puede tener algunas DLL cargadas o no cuando su aplicación se está ejecutando.

En plataformas no integradas, la mayoría de las aplicaciones no se preocupan por las ubicaciones exactas de la memoria física, ni es una preocupación que estén cargadas en la misma ubicación cada vez. La mayoría de las plataformas integradas cargan sus aplicaciones en el mismo lugar cada vez, ya que no tienen suficiente memoria para moverse.

Debido a estos casos y las situaciones que otras personas han mencionado, NO CÓDIGA los principios de UBICACIÓN DE MEMORIA CONSTANTE en su progtwig. Pasarán cosas muy malas, especialmente difíciles de rastrear y depurar.

Además de preguntas dinámicas, como las direcciones de stack como señala Steven, también está el aspecto del tiempo de comstackción y el diseño estático.

Ya creo que dos máquinas son clones exactos el uno del otro es una situación muy particular, ya que puede tener pequeñas diferencias en la versión de CPU, bibliotecas, etc. Luego, algunos comstackdores (tal vez dependiendo de algunas opciones) también ponen la fecha y la hora de comstackción ejecutable. Si, por ejemplo, sus dos nombres de host tienen diferentes longitudes o si este utiliza un formato de fecha que varía en longitud, no solo estas cadenas serán diferentes, sino que todas las demás variables estáticas podrían estar ligeramente desplazadas en el espacio de direcciones.

Recuerdo que gcc tuvo dificultades en algunas architectures con su comstackción automática, ya que el comstackdor que se produjo en la etapa 2 se diferenció de la comstackción en la etapa 3 por razones tan estúpidas.

La macro __TIME__ expande a (el inicio de) el tiempo de comstackción. Además, se determina de forma independiente para todos y cada uno de los archivos .cpp que comstack, y el vinculador puede eliminar cadenas duplicadas.

Como resultado, dependiendo de la velocidad de comstackción, sus ejecutables pueden terminar no solo con diferentes cadenas __TIME__ , sino incluso con un número diferente de cadenas __TIME__ .

Si está trabajando tarde, podría ver lo mismo con __DATE__ cadenas __DATE__ 😉

¿Es posible que tengan el mismo diseño de memoria? Sí, es una posibilidad. ¿Es probable ? Realmente no.

Como han señalado otros, cosas como la aleatorización del espacio de direcciones y __TIME__ macros __TIME__ pueden hacer que el espacio de direcciones sea diferente (ya sea que los cambios se hayan realizado en tiempo de comstackción o de ejecución). En mi experiencia, muchos comstackdores no producen la misma salida idéntica cuando se ejecutan dos veces en la misma máquina usando exactamente la misma entrada (las funciones se presentan en la memoria en diferentes órdenes, etc.).

¿Es esta una pregunta retórica / intelectual, o te está causando que encuentres algún tipo de problema con un progtwig que estás escribiendo?

Intereting Posts