tag online mp3tag mp3meta windows winapi exception

windows - online - tag editor music pc



¿Cuál es exactamente el alcance de la Infracción de acceso ''0xc0000005''? (3)

Me preguntaba sobre la excepción 0xc0000005 y lo que realmente abarca.

Es decir, esto ocurre si una aplicación intenta acceder a la memoria / memoria liberada perteneciente a otro proceso.
Pero, ¿qué pasa con, por ejemplo, una dirección asignada para el hardware? ¿O una dirección fuera del rango válido? ¿Intenta acceder a estos errores con el mismo código o tienen los suyos? ¿Esto incluye lecturas fallidas a direcciones válidas propiedad del proceso?

Básicamente, quiero saber cuándo una aplicación falla con esta excepción, lo que pudo haber salido mal; ¿Es esta una falla estrecha que solo podría haber venido de las aplicaciones? código o estoy mirando algo e incluyendo problemas de hardware?

(Sé que debe haber una página de MSDN sobre esto, pero buscar en Google o MSDN muestra las 100 páginas de resolución de problemas de las aplicaciones aleatorias;))

¡Gracias!


Debe leer el manual del procesador para profundizar en esto. Se desencadena por una "trampa", mejor descrita como una excepción en el procesador. Una trampa interrumpe la ejecución del código y permite que un controlador del sistema operativo "atrapar" maneje la falla. Una de las más comunes es una falla de página, que se produce cuando el procesador intenta leer datos de la memoria RAM que aún no se ha mapeado. Así es como se implementa la memoria virtual.

Un AccessViolation pertenece a un grupo de trampas que son fallas difíciles que el sistema operativo no sabe cómo manejar. Se llama "Error de protección general" en el manual del procesador. Es una especie de saco de sorpresas, hay muchas maneras de activar un GPF. Con mucho, el más común es tratar de leer la memoria que no está asignada, generalmente causada por la corrupción de la memoria del montón. Seguido de intentar ejecutar una instrucción de código de máquina que no es válida o solo puede ser ejecutada por código privilegiado, generalmente causado por corrupción de la memoria de la pila.

Estas trampas son tan desagradables como vienen, el procesador simplemente no puede continuar ejecutando el programa. El sistema operativo ciertamente no sabe cómo manejarlo, genera una excepción de AccessViolation para darle al programa la posibilidad de volver el procesador a un código conocido. Posible mediante el uso de __try/__except palabras clave en su código. No es una gran idea, salvo para los informes de errores personalizados, no tienes una idea real de cómo el estado de tu programa se mutó antes de morir y, por lo tanto, no hay forma de restaurarlo.

Sin ese controlador SEH, esto termina en un respaldo que proporciona Windows. Puede proporcionar el suyo propio con SetUnhandledExceptionFilter() , útil para personalizar el informe de SetUnhandledExceptionFilter() . El proporcionado por el sistema pone fin al desencadenamiento de WER, el componente de informe de errores de Windows. Que finalmente termina el proceso.


En primer lugar, debe comprender que las direcciones en un proceso de modo de usuario son direcciones virtuales. No son las direcciones reales utilizadas para acceder al hardware. Por el contrario, existe un circuito de traducción virtual a físico en la CPU (parte de la unidad de gestión de memoria) que encuentra una entrada coincidente en el "Búfer de traducción Lookaside". Durante cada cambio de contexto, el sistema operativo rellena el TLB con las asignaciones de memoria que pertenecen a su proceso.

Por lo tanto, no hay forma de intentar acceder a la memoria que pertenece a otros procesos, ni puede intentar acceder al hardware. No es que este acceso se detecte y falle, es que no existe una asignación para la memoria que no pertenece a su programa.

Si su programa accede a una dirección que no se asigna a ninguna parte, se producirá una trampa como dijo Hans. Es la misma trampa para "fallas de página" y "violaciones de acceso". Primero, el sistema operativo verificará si la dirección es válida pero no está en el TLB (por ejemplo, su PC se quedó sin memoria y parte se transfirió al disco). En ese caso, el sistema operativo volverá a mover los datos a la memoria RAM física, establecerá la asignación correcta en el TLB y continuará ejecutando su programa. Si el sistema operativo determina que la dirección es completamente inválida (no hay una ubicación de intercambio asociada), generará una "infracción de acceso" (denominación de Windows) o "falla de segmentación" (denominación POSIX).

Por lo general, la causa es un error de lógica, pero si tiene, por ejemplo, una falla de RAM que cambió un poco en uno de sus punteros, la falla de hardware también podría desencadenar una infracción de acceso.


Obtuve this como mi primer resultado de "infracción de acceso" (sin comillas) en google. No estoy seguro de los detalles, pero un AV simplemente significa que: el procesador intentó leer o escribir en una dirección particular que su estado actual no permitía. Podría ser un problema de hardware, un error de bus, memoria virtual no asignada, mala CPU; prácticamente cualquier cosa que indique una violación de las protecciones de acceso.