¿Por qué un desbordamiento del búfer del montón causaría un bloqueo solo en algunos sistemas Windows 10?

4

Tengo un intento de acceso de lectura fuera de los límites stl::vector (VS 2010 SP1, x86) que provoca una falla en solo tres sistemas Windows 10. Es completamente reproducible en esos sistemas, pero no puede reproducirse en otros sistemas (Windows 10 o de otro tipo), usando exactamente los mismos archivos ejecutables y de datos.

¿Qué protecciones de seguridad podrían estar implementadas en esos tres sistemas que detectan la violación, o por qué podría no estar ocurriendo en los otros sistemas?

El software errante está en una biblioteca estática de C ++ que se ejecuta desde un ejecutable .NET (administrado).

    
pregunta Patrick 10.06.2016 - 16:03
fuente

1 respuesta

3

Como alguien ya señaló: No esperes que un comportamiento indefinido sea reproducible.

Dicho esto, hay muchas variables. Por supuesto, existen los más obvios (como la arquitectura de CPU / modo de 32 bits o 64 bits; versiones exactas del sistema operativo u otro software involucrado (como .NET); etc.) pero también existen los más sutiles. Al igual que la cantidad de memoria que se proporciona el proceso en un momento en el que solicita algo o incluso cuánto pide en un momento.

Entonces, si comprueba cuánta memoria virtual tiene el proceso en diferentes máquinas antes de fallar, y los números son diferentes, esta puede ser una buena razón para que se bloquee en un sistema pero no en el otro.

La cantidad de memoria que se proporciona a la vez puede depender de muchos factores diferentes, como la cantidad de memoria física disponible, la cantidad de espacio de intercambio disponible, la estrategia de intercambio utilizada, la asignación de memoria actual, etc. Si lo probó en una máquina con 16 GB de RAM 10 veces, utilizando actualmente 1 GB de RAM para el sistema operativo y otras aplicaciones, y el proceso no se bloquea, realmente no reproducirá ese comportamiento de manera confiable. Mantuviste las variables relativamente constantes. Es muy probable que se bloquee las 10 veces en una máquina con el mismo software, pero solo 4 GB de RAM y que use 3 GB.

    
respondido por el UTF-8 10.06.2016 - 22:24
fuente

Lea otras preguntas en las etiquetas