2011-07-05 12 views
8

Dada la salida de error y advertencia PEVerify como la siguiente, ¿cómo se hace un seguimiento de la clase ofensiva y los nombres de la interfaz? Supongamos que no soy compilador ni mago IL.¿Hay una manera simple de decodificar errores y advertencias de PEVerify?

[MD]: Error: Class implements interface but not method (class:0x02000091; interface:0x06000169;method:0x00000000). [token:0x09000043] 
[MD]: Warning: MemberRef has a duplicate, token=0x0a0001ff. [token:0x0A000060] 
+0

Si no es compilador de autor o hacker de IL, ¿cómo creó un ensamblado con estos problemas? Los compiladores .NET producen ensamblajes válidos en todos los casos (a excepción de los errores del compilador ofc) – thecoop

+0

@thecoop Desde que originalmente publiqué la pregunta, he determinado que estos errores están en un ensamblado de un tercero. El ensamblaje es una compilación de proyecto OSS, por lo que todavía me gustaría rastrearlo. – bentayloruk

+1

@thecoop, parece que estos errores ocurren cuando implementa el truco de inteligencia [IHideObjectMember] (http://blogs.clariusconsulting.net/kzu/how-to-hide-system-object-members-from-your-interfaces/) Es la causa en nuestro caso y lo hemos verificado en un segundo ensamblaje que usa este truco (Autofac y Moq). – bentayloruk

Respuesta

11

Utilice ILDASM y cargue el conjunto en cuestión. Vaya a Ver-> MetaInfo-> ¡Mostrar! Esto abre un visor de texto que muestra una versión legible por humanos de los metadatos del conjunto. Busque los identificadores hexadecimales (pero omita la parte "0x") para encontrar la clase, la interfaz y los métodos correspondientes.

+0

¿Hay alguna manera de hacer esto programáticamente? – BatteryBackupUnit

+1

El formato de archivo PE, cuyo encabezado contiene esta información, está bien documentado y tiene estructuras definidas en los archivos de encabezado de Windows en el SDK de Windows, la mayoría de los cuales están disponibles como estructuras C# para las asignaciones de PInvoke. Aquí hay un código de alguien para leer una parte diferente de ese encabezado: http://code.cheesydesign.com/?p=572 –

Cuestiones relacionadas