Comment : déterminer si une image est native ou CLR
Une façon de déterminer si une image a été créée pour le Common Language Runtime consiste à utiliser la dumpbin /CLRHEADER
commande. Pour plus d’informations, consultez /CLRHEADER
.
Vous pouvez également case activée par programmation si une image a été créée pour le Common Language Runtime. Pour plus d’informations, consultez Guide pratique pour détecter la compilation /clr.
Exemple
L’exemple suivant détermine si une image a été créée pour s’exécuter sur le Common Language Runtime.
// detect_image_type.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;
enum class CompilationMode {Invalid, Native, CLR };
static CompilationMode IsManaged(String^ filename) {
try {
array<Byte>^ data = gcnew array<Byte>(4096);
FileInfo^ file = gcnew FileInfo(filename);
Stream^ fin = file->Open(FileMode::Open, FileAccess::Read);
Int32 iRead = fin->Read(data, 0, 4096);
fin->Close();
// Verify this is a executable/dll
if ((data[1] << 8 | data[0]) != 0x5a4d)
return CompilationMode::Invalid;
// This will get the address for the WinNT header
Int32 iWinNTHdr = data[63]<<24 | data[62]<<16 | data[61] << 8 | data[60];
// Verify this is an NT address
if ((data[iWinNTHdr+3] << 24 | data[iWinNTHdr+2] << 16 | data[iWinNTHdr+1] << 8 | data[iWinNTHdr]) != 0x00004550)
return CompilationMode::Invalid;
Int32 iLightningAddr = iWinNTHdr + 24 + 208;
Int32 iSum = 0;
Int32 iTop = iLightningAddr + 8;
for (int i = iLightningAddr; i < iTop; ++i)
iSum |= data[i];
if (iSum == 0)
return CompilationMode::Native;
else
return CompilationMode::CLR;
}
catch(Exception ^e) {
throw(e);
}
}
int main() {
array<String^>^ args = Environment::GetCommandLineArgs();
if (args->Length < 2) {
Console::WriteLine("USAGE : detect_clr <assembly_name>\n");
return -1;
}
Console::WriteLine("{0} is compiled {1}", args[1], IsManaged(args[1]));
}
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour