2009-12-22 10 views

Respuesta

5

Ejecutar la herramienta PEVerify en contra de su montaje.

PEVerify.exe se instala junto con Visual Studio, por ejemplo,éste viene con Visual Studio 2012:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\PEVerify.exe

+0

Una vez que ejecuta esta utilidad, ¿cómo puede uno saber si se trata de un código puramente administrado? Acabo de recibir: "Todas las clases y métodos en verificados". –

+1

@DanW: entonces todo está bien. Obtendrá errores de lo contrario. Si se invoca desde un script u otro programa, puede verificar si hay un código de salida distinto de cero que indique errores. Puede probar esto usando la palabra clave "insegura" en C#. –

0

Voy a tener que comprobar esto, pero estoy bastante seguro de que usted puede encontrar que con reflector de Redgate.

+1

no parece ser una buena idea? - es un montón de trabajo para cavar todos los métodos de una asamblea – ironic

+0

Cómo no puedo encuentre algo en el Reflector 5.1.6.0 con respecto a esto. –

0

asambleas ILMerge sólo combina gestionados, here, para citar de su página de descarga, 'ILMerge es una utilidad para la fusión de varias NET en un ensamblado de .NET sola'.

no he visto un ensamblado administrado fusionó con un binario nativo. Técnicamente, podrías fusionarlos per se, incluyendo el binario no administrado como un recurso incrustado, pero la carga del recurso incrustado en la memoria como un código binario: no he visto esto antes. He intentado esa técnica usando mapas de memoria pero fallado.

La otra forma de comprobar es buscar en el binario, si tiene la decimoquinta entrada en el directorio de datos y no es cero, entonces es un binario .NET, los binarios nativos no lo tienen. Ver here donde publiqué esta respuesta a una pregunta similar.

Espero que esto ayude, Saludos cordiales, Tom.

0

creo que se debe utilizar .NET reflexión para ir a través de todos los tipos y métodos de montaje.

3

Run ildasm desde un símbolo de Visual Studio del sistema como sigue:

ildasm file.exe/cabeceras/borrilla/texto

Hacia el final de la salida verá lo siguiente:

// ----- CLR Cabecera:
tamaño // Cabecera: ...
// Mayor tiempo de ejecución Versi en: ... //
versión de tiempo de ejecución menor: ... // ...

// Banderas: 0x00000000

Si Flags tiene el bit más bajo (por ejemplo, 0x00000001) entonces el conjunto es CLR puro; si no (por ejemplo, 0x00000000), entonces el ensamblaje está en modo mixto. Tenga en cuenta que otras banderas pueden estar presentes, por lo que es solo el bit más bajo que le interesa (de modo que si el último dígito es 1, 3, 5, 7, 9, b, d o f, entonces es CLR puro).

(Edit: También puede ejecutar ildasm gráficamente, abra el archivo ejecutable en cuestión, y selecciona encabezados en el menú Ver para ver la misma información.)

+3

No es un afaik slam-dunk, la compilación de C++/CLI er/linker no establece este bit correctamente, incluso si compila con/clr: pure. Corflags.exe muestra esto también. –

9

Como sugiere nobugz, una manera más fácil ver las banderas CLR está utilizando la utilidad corflags, que forma parte del SDK de .NET 2.0.

Si no se especifican opciones, se muestran las banderas de la imagen dada:

C:\>corflags Foo.dll 
Version : v2.0.50727 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 9 
ILONLY : 1 
32BIT  : 0 
Signed : 1 

El "ILONLY" bit indica si se trata de una assemby logrado puro, o una asamblea mixta.

Tenga en cuenta que el comentario del usuario 'nobugz' sugiere que estos indicadores no están garantizados para ser correctos, por lo que este método puede no ser infalible.

0

para obtener los indicadores de educación física de C#, utilice la API System.Reflection: http://www.example8.com/category/view/id/6027

...

Assembly a = Assembly.GetExecutingAssembly(); 
Module m = a.ManifestModule; 

PortableExecutableKinds peKinds; 
ImageFileMachine imageFileMachine; 
m.GetPEKind(out peKinds, out imageFileMachine); 

if ((peKinds & PortableExecutableKinds.ILOnly) != 0) 

...

1

La mejora en la respuesta proporcionada por encima de Wim ..

  1. Localice su "PEVerify.exe" - lo tiene si tiene VS instalado.- CO PY LA RUTA COMPLETA AL archivo PEVerify.exe, su ruta será diferente - - Aquí hay un ejemplo: C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools \ PEVerify.exe

  2. pronta Abra Visual Studio comando (no "Ejecutar como Administrador")

  3. Type en: cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools

  4. su línea de comandos debería ser ahora este largo texto en lugar de simplemente C: \ o algo .... apuntará a la ruta de acceso donde se encuentra PEVerify.exe.

  5. Ahora escribe: peverify "your full path to your dll you want to check - A continuación, pulse Enter - Aquí está mi ejemplo: PEVerify "G: \ TestFolder \ My_Managed_OR_Unmanaged.dll"

  6. Después de pulsar Intro y aparece un mensaje como abajo, su 100 DLL administrada% -. todas las clases y métodos en My_Managed_OR_Unmanaged.dll verificado"

Cuestiones relacionadas