Excepción de acceso falso en instrucción Push en código de Windows de 32 bits
Frecuentes
Visto 75 veces
1
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.
1 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas access-violation or haz tu propia pregunta.