Excepción de acceso falso en instrucción Push en código de Windows de 32 bits

Tengo un programa complicado de subprocesos múltiples de 32 bits que se ejecuta en un sistema Windows Server 64 R2008 Enterprise SP2 de 1 bits.

Ejecutando bajo el depurador de MSVC, a veces me detengo con una violación de acceso informada en una instrucción dentro del código winsock, una instrucción que no tiene una razón obvia para causar una excepción. Un ejemplo típico:

82 hilos informados por el depurador. El que se selecciona cuando la violación de acceso desencadena una interrupción del programa muestra esto...

Registros:

 EAX = 0DBC9918 EBX = 54007022
 ECX = 00374248 EDX = 00000000
 ESI = 00000000 EDI = 00370924
 EIP = 745616B4 ESP = 0DBC98C8
 EBP = 0DBC9934 EFL = 00010246

Desmontaje:

745616B4 68 27 2F 58 74       push        74582F27h
745616B9 64 FF 35 00 00 00 00 push        dword ptr fs:[0]
745616C0 8B 44 24 10          mov         eax,dword ptr [esp+10h]
745616C4 89 6C 24 10          mov         dword ptr [esp+10h],ebp

Memoria (dirección esp-4)

0DBC98C4  00370844  745636C2  74563808  0000003C  
0DBC98D4  75B83D70  00000002  00000001  00000000

Los datos de la frontera de la pila provienen de un par de pulsaciones y una llamada que parece haber funcionado bien:

745636B6 6A 3C                push        3Ch
745636B8 68 08 38 56 74       push        74563808h
745636BD E8 F2 DF FF FF       call        745616B4
745636C2 ...

No parece que el empuje en deba estar golpeando una excepción de página de protección, dada su dirección y los empujes exitosos que lo precedieron. Los otros subprocesos no parecen ser candidatos probables para causar la excepción, a juzgar por la información de la pila de llamadas. No sé si hay algún mecanismo que estoy pasando por alto que podría generar esa violación de acceso en esa instrucción, o si el depurador me está engañando. Cualquier luz que pueda arrojar sería apreciada.

preguntado el 12 de junio de 12 a las 19:06

1 Respuestas

Eso sería DEP seguro (prevención de ejecución de datos). Acabo de tener exactamente el mismo problema, código similar; pasé unas horas en estas cosas; olvidando que UAC y DEP son dos cosas diferentes.

contestado el 23 de mayo de 17 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.