diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2017-02-10 20:35:12 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2017-02-10 20:35:12 +0900 |
commit | 4b11dc566a5bbfa1378d6266525c281b028abcc8 (patch) | |
tree | b48831a898906734f8884d08b6e18f1144ee2b82 /src/ildasm | |
parent | db20f3f1bb8595633a7e16c8900fd401a453a6b5 (diff) | |
download | coreclr-4b11dc566a5bbfa1378d6266525c281b028abcc8.tar.gz coreclr-4b11dc566a5bbfa1378d6266525c281b028abcc8.tar.bz2 coreclr-4b11dc566a5bbfa1378d6266525c281b028abcc8.zip |
Imported Upstream version 1.0.0.9910upstream/1.0.0.9910
Diffstat (limited to 'src/ildasm')
59 files changed, 29 insertions, 5972 deletions
diff --git a/src/ildasm/Litening.ico b/src/ildasm/Litening.ico Binary files differdeleted file mode 100644 index 7bdaa4f1e9..0000000000 --- a/src/ildasm/Litening.ico +++ /dev/null diff --git a/src/ildasm/class.bmp b/src/ildasm/class.bmp Binary files differdeleted file mode 100644 index 1574b641df..0000000000 --- a/src/ildasm/class.bmp +++ /dev/null diff --git a/src/ildasm/classa.bmp b/src/ildasm/classa.bmp Binary files differdeleted file mode 100644 index d0467c45e3..0000000000 --- a/src/ildasm/classa.bmp +++ /dev/null diff --git a/src/ildasm/classag.bmp b/src/ildasm/classag.bmp Binary files differdeleted file mode 100644 index 72793ce02f..0000000000 --- a/src/ildasm/classag.bmp +++ /dev/null diff --git a/src/ildasm/classe.bmp b/src/ildasm/classe.bmp Binary files differdeleted file mode 100644 index a5f641c915..0000000000 --- a/src/ildasm/classe.bmp +++ /dev/null diff --git a/src/ildasm/classeg.bmp b/src/ildasm/classeg.bmp Binary files differdeleted file mode 100644 index 3aeded1ed2..0000000000 --- a/src/ildasm/classeg.bmp +++ /dev/null diff --git a/src/ildasm/classi.bmp b/src/ildasm/classi.bmp Binary files differdeleted file mode 100644 index 74d64feb09..0000000000 --- a/src/ildasm/classi.bmp +++ /dev/null diff --git a/src/ildasm/classig.bmp b/src/ildasm/classig.bmp Binary files differdeleted file mode 100644 index 79b43144a9..0000000000 --- a/src/ildasm/classig.bmp +++ /dev/null diff --git a/src/ildasm/classv.bmp b/src/ildasm/classv.bmp Binary files differdeleted file mode 100644 index ecf345ac05..0000000000 --- a/src/ildasm/classv.bmp +++ /dev/null diff --git a/src/ildasm/classvg.bmp b/src/ildasm/classvg.bmp Binary files differdeleted file mode 100644 index a77f99b359..0000000000 --- a/src/ildasm/classvg.bmp +++ /dev/null diff --git a/src/ildasm/dasm.cpp b/src/ildasm/dasm.cpp index 86ff5a8932..7b6bca926e 100644 --- a/src/ildasm/dasm.cpp +++ b/src/ildasm/dasm.cpp @@ -17,7 +17,6 @@ #include "dasmenum.hpp" #include "dis.h" -#include "dasmgui.h" #include "resource.h" #include "dasm_sz.h" @@ -35,13 +34,6 @@ #include <corcompile.h> #endif -#ifndef FEATURE_CORECLR -// Define also LegacyActivationShim::CoInitializeEE wrapper around CoInitializeEE -#define LEGACY_ACTIVATION_SHIM_DEFINE_CoInitializeEE -#include "LegacyActivationShim.h" -#include "clrinternal.h" -#endif - #ifdef FEATURE_PAL #include "coreclrloader.h" #include "resourcestring.h" @@ -119,7 +111,6 @@ BOOL g_fHidePrivScope = TRUE; BOOL g_fProject = FALSE; // if .winmd file, transform to .NET view extern BOOL g_fQuoteAllNames; // declared in formatType.cpp, init to FALSE -BOOL g_fShowProgressBar = TRUE; BOOL g_fForwardDecl=FALSE; char g_szAsmCodeIndent[MAX_MEMBER_LENGTH]; @@ -170,8 +161,6 @@ void DisplayFile(__in __nullterminated wchar_t* szFile, __in_opt __nullterminated wchar_t* szObjFile, strPassBackFn pDisplayString); extern mdMethodDef g_tkEntryPoint; // integration with MetaInfo -// Abort disassembly flag: -BOOL g_fAbortDisassembly = FALSE; DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName); // see DRES.CPP @@ -319,12 +308,6 @@ extern CQuickBytes * g_szBuf_JUMPPT; extern CQuickBytes * g_szBuf_UnquotedProperName; extern CQuickBytes * g_szBuf_ProperName; -#ifndef FEATURE_CORECLR -// CLR internal hosting API -ICLRRuntimeHostInternal *g_pCLRRuntimeHostInternal = NULL; -#endif - -#ifdef FEATURE_CORECLR #ifdef FEATURE_PAL CoreCLRLoader *g_loader; #endif @@ -332,11 +315,9 @@ MetaDataGetDispenserFunc metaDataGetDispenser; GetMetaDataInternalInterfaceFunc getMetaDataInternalInterface; GetMetaDataInternalInterfaceFromPublicFunc getMetaDataInternalInterfaceFromPublic; GetMetaDataPublicInterfaceFromInternalFunc getMetaDataPublicInterfaceFromInternal; -#endif BOOL Init() { -#ifdef FEATURE_CORECLR #ifdef FEATURE_PAL g_loader = CoreCLRLoader::Create(g_pszExeFile); if (g_loader == NULL) @@ -353,37 +334,7 @@ BOOL Init() getMetaDataInternalInterfaceFromPublic = (GetMetaDataInternalInterfaceFromPublicFunc)GetMetaDataInternalInterfaceFromPublic; getMetaDataPublicInterfaceFromInternal = (GetMetaDataPublicInterfaceFromInternalFunc)GetMetaDataPublicInterfaceFromInternal; #endif // FEATURE_PAL -#else // FEATURE_CORECLR - if (FAILED(CoInitialize(NULL))) - { - return FALSE; - } - - if (FAILED(LegacyActivationShim::CoInitializeCor(COINITCOR_DEFAULT))) - { - return FALSE; - } - - if (FAILED(LegacyActivationShim::CoInitializeEE(COINITEE_DEFAULT))) - { - return FALSE; - } - - ICLRRuntimeInfo *pCLRRuntimeInfo = NULL; - if (FAILED(LegacyActivationShim::Util::GetCLRRuntimeInfo(&pCLRRuntimeInfo))) - { - return FALSE; - } - - if (FAILED(pCLRRuntimeInfo->GetInterface( - CLSID_CLRRuntimeHostInternal, - IID_ICLRRuntimeHostInternal, - (LPVOID *)&g_pCLRRuntimeHostInternal))) - { - return FALSE; - } -#endif // FEATURE_CORECLR - + g_szBuf_KEYWORD = new CQuickBytes(); g_szBuf_COMMENT = new CQuickBytes(); g_szBuf_ERRORMSG = new CQuickBytes(); @@ -482,10 +433,6 @@ void Cleanup() void Uninit() { -#ifndef FEATURE_CORECLR - GUIAddOpcode(NULL,NULL); -#endif - if (g_pPtrTags != NULL) { SDELETE(g_pPtrTags); @@ -541,24 +488,12 @@ void Uninit() SDELETE(g_szBuf_ProperName); } -#ifdef FEATURE_CORECLR #ifdef FEATURE_PAL if (g_loader != NULL) { g_loader->Finish(); } #endif -#else - if (g_pCLRRuntimeHostInternal != NULL) - { - g_pCLRRuntimeHostInternal->Release(); - g_pCLRRuntimeHostInternal = NULL; - } - - LegacyActivationShim::CoUninitializeEE(COUNINITEE_DEFAULT); - LegacyActivationShim::CoUninitializeCor(); - CoUninitialize(); -#endif } // Uninit HRESULT IsClassRefInScope(mdTypeRef classref) @@ -1695,17 +1630,10 @@ mdToken TypeRefToTypeDef(mdToken tk, IMDInternalImport *pIMDI, IMDInternalImport IUnknown *pUnk; if(FAILED(pIAMDI[0]->QueryInterface(IID_IUnknown, (void**)&pUnk))) goto AssignAndReturn; -#ifdef FEATURE_CORECLR if (FAILED(getMetaDataInternalInterfaceFromPublic( pUnk, IID_IMDInternalImport, (LPVOID *)ppIMDInew))) -#else - if (FAILED(g_pCLRRuntimeHostInternal->GetMetaDataInternalInterfaceFromPublic( - pUnk, - IID_IMDInternalImport, - (LPVOID *)ppIMDInew))) -#endif { goto AssignAndReturn; } @@ -4650,7 +4578,7 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha #if (0) - if((!IsTdNested(dwClassAttrs))&&(!(g_Mode & MODE_GUI))) // don't dump namespaces in GUI mode! + if((!IsTdNested(dwClassAttrs))) { // take care of namespace, if any if(strcmp(pszNamespace,g_szNamespace)) @@ -4905,11 +4833,6 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha if(g_cl_enclosing[i] == cl) { DumpClass(g_cl_list[i],dwEntryPointToken,GUICookie,WhatToDumpOrig); - if(g_fAbortDisassembly) - { - g_Mode = dwMode; - return FALSE; - } fRegetClassLayout = TRUE; } } @@ -4920,9 +4843,6 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha if(WhatToDump & 4) { DumpMembers(cl, pszNamespace, pszClassName, dwClassAttrs, dwEntryPointToken,GUICookie); -#ifndef FEATURE_CORECLR - if(!ProgressStep()) g_fAbortDisassembly = TRUE; -#endif } if(g_szAsmCodeIndent[0]) g_szAsmCodeIndent[strlen(g_szAsmCodeIndent)-2] = 0; @@ -4931,10 +4851,7 @@ BOOL DumpClass(mdTypeDef cl, DWORD dwEntryPointToken, void* GUICookie, ULONG Wha if(*pszNamespace != 0) szptr+=sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s.",ProperName(pszNamespace)); sprintf_s(szptr,SZSTRING_REMAINING_SIZE(szptr),"%s%s", ProperName(pszClassName),COMMENT((char*)-1)); printLine(GUICookie,szString); - if(!(g_Mode & MODE_GUI)) - { - printLine(GUICookie,""); - } + printLine(GUICookie,""); g_tkVarOwner = tkVarOwner; return TRUE; } @@ -4953,7 +4870,7 @@ void DumpGlobalMethods(DWORD dwEntryPointToken) for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++) { - if ((i == 0)&&(!(g_Mode & MODE_GUI))) + if (i == 0) { printLine(g_pFile,""); printLine(g_pFile,COMMENT("// ================== GLOBAL METHODS =========================")); @@ -4961,14 +4878,6 @@ void DumpGlobalMethods(DWORD dwEntryPointToken) } if(DumpMethod(FuncToken, NULL, dwEntryPointToken, g_pFile, TRUE)&& (g_Mode == MODE_DUMP_CLASS_METHOD || g_Mode == MODE_DUMP_CLASS_METHOD_SIG)) break; - -#ifndef FEATURE_CORECLR - if(!ProgressStep()) - { - g_fAbortDisassembly = TRUE; - break; - } -#endif } g_pImport->EnumClose(&hEnumMethod); if(i) @@ -4991,7 +4900,7 @@ void DumpGlobalFields() for (i = 0; g_pImport->EnumNext(&hEnum, &FieldToken); i++) { - if ((i == 0)&&(!(g_Mode & MODE_GUI))) + if (i == 0) { printLine(g_pFile,""); printLine(g_pFile,COMMENT("// ================== GLOBAL FIELDS ==========================")); @@ -5019,8 +4928,6 @@ void DumpVTables(IMAGE_COR20_HEADER *CORHeader, void* GUICookie) if (VAL32(CORHeader->VTableFixups.VirtualAddress) == 0) return; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode - sprintf_s(szString,SZSTRING_SIZE,"// VTableFixup Directory:"); printLine(GUICookie,szStr); @@ -5087,7 +4994,6 @@ void DumpEATTable(IMAGE_COR20_HEADER *CORHeader, void* GUICookie) DWORD BufferRVA; DWORD i; char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode sprintf_s(szString,SZSTRING_SIZE,"// Export Address Table Jumps:"); printLine(GUICookie,szStr); @@ -5143,7 +5049,6 @@ exit: void DumpCodeManager(IMAGE_COR20_HEADER *CORHeader, void* GUICookie) { char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode sprintf_s(szString,SZSTRING_SIZE,"// Code Manager Table:"); printLine(GUICookie,szStr); if (!VAL32(CORHeader->CodeManagerTable.Size)) @@ -5180,7 +5085,6 @@ void DumpSectionHeaders(IMAGE_SECTION_HEADER* pSH, USHORT nSH, void* GUICookie) { char* szStr = &szString[0]; char name[16]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode printLine(GUICookie,""); strcpy_s(szString,SZSTRING_SIZE,"// Image sections:"); printLine(GUICookie,szStr); @@ -5280,7 +5184,6 @@ void DumpSectionHeaders(IMAGE_SECTION_HEADER* pSH, USHORT nSH, void* GUICookie) void DumpBaseReloc(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie) { char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode sprintf_s(szString,SZSTRING_SIZE,"// %s", szName); printLine(GUICookie,szStr); if (!VAL32(pDir->Size)) @@ -5322,7 +5225,7 @@ void DumpBaseReloc(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICook void DumpIAT(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie) { char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode + sprintf_s(szString,SZSTRING_SIZE,"// %s", szName); printLine(GUICookie,szStr); if (!VAL32(pDir->Size)) @@ -5398,7 +5301,7 @@ struct MDStreamHeader void DumpMetadataHeader(const char *szName, IMAGE_DATA_DIRECTORY *pDir, void* GUICookie) { char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode + printLine(GUICookie,""); sprintf_s(szString,SZSTRING_SIZE,"// %s", szName); printLine(GUICookie,szStr); @@ -5501,7 +5404,7 @@ void DumpEntryPoint(DWORD dwAddrOfEntryPoint,DWORD dwEntryPointSize,void* GUICoo char* szStr = &szString[0]; char* szptr = szStr+2; DWORD i; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode + printLine(GUICookie,""); strcpy_s(szString,SZSTRING_SIZE,"// Entry point code:"); printLine(GUICookie,szStr); @@ -5531,7 +5434,7 @@ void DumpEntryPoint(DWORD dwAddrOfEntryPoint,DWORD dwEntryPointSize,void* GUICoo void DumpHeader(IMAGE_COR20_HEADER *CORHeader, void* GUICookie) { char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode + DWORD dwAddrOfEntryPoint=0, dwEntryPointSize=0; PIMAGE_DOS_HEADER pDOSHeader = g_pPELoader->dosHeader(); @@ -5905,8 +5808,6 @@ void DumpTable(unsigned long Table, const char *TableName, void* GUICookie) int size; ULONG sizeRec, count; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode - // Record that this table has been seen. TableSeen(Table); @@ -5942,7 +5843,6 @@ void DumpStatistics(IMAGE_COR20_HEADER *CORHeader, void* GUICookie) ULONG sizeRec, count; char buf[MAX_MEMBER_LENGTH]; char* szStr = &szString[0]; - if(g_Mode & MODE_GUI) szStr += 2; // no need for "//" in GUI mode TableSeenReset(); metaSize = 0; @@ -6965,7 +6865,7 @@ void DumpMI(__in __nullterminated const char *str) strcpy_s(szString,5,"// "); fInit = FALSE; GUICookie = (void*)str; - if(g_Mode & MODE_GUI) szStr = &szString[3]; // don't need "//" in GUI mode + return; } // Normal work @@ -7011,18 +6911,8 @@ void DumpMetaInfo(__in __nullterminated const WCHAR* pwzFileName, __in_opt __nul if(pch && (!_wcsicmp(pch+1,W("lib")) || !_wcsicmp(pch+1,W("obj")))) { // This works only when all the rest does not // Init and run. -#ifdef FEATURE_CORECLR if (metaDataGetDispenser(CLSID_CorMetaDataDispenser, IID_IMetaDataDispenserEx, (void **)&g_pDisp)) -#else - if(SUCCEEDED(CoInitialize(0))) - { - if(SUCCEEDED(LegacyActivationShim::CoInitializeCor(0))) - { - if (SUCCEEDED(LegacyActivationShim::ClrCoCreateInstance( - CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER, - IID_IMetaDataDispenserEx, (void **) &g_pDisp))) -#endif { WCHAR *pwzObjFileName=NULL; if (pszObjFileName) @@ -7037,39 +6927,25 @@ void DumpMetaInfo(__in __nullterminated const WCHAR* pwzFileName, __in_opt __nul g_pDisp = NULL; if (pwzObjFileName) VDELETE(pwzObjFileName); } -#ifndef FEATURE_CORECLR - LegacyActivationShim::CoUninitializeCor(); - } - CoUninitialize(); - } -#endif } else { HRESULT hr = S_OK; if(g_pDisp == NULL) { -#ifdef FEATURE_CORECLR hr = metaDataGetDispenser(CLSID_CorMetaDataDispenser, IID_IMetaDataDispenserEx, (void **)&g_pDisp); -#else - hr = LegacyActivationShim::ClrCoCreateInstance( - CLSID_CorMetaDataDispenser, NULL, CLSCTX_INPROC_SERVER, - IID_IMetaDataDispenserEx, (void **) &g_pDisp); -#endif } if(SUCCEEDED(hr)) { g_ValModuleType = ValidatorModuleTypePE; if(g_pAssemblyImport==NULL) g_pAssemblyImport = GetAssemblyImport(NULL); - if(!(g_Mode & MODE_GUI)) - printLine(GUICookie,RstrUTF(IDS_E_MISTART)); + printLine(GUICookie,RstrUTF(IDS_E_MISTART)); //MDInfo metaDataInfo(g_pPubImport, g_pAssemblyImport, (LPCWSTR)pwzFileName, DumpMI, g_ulMetaInfoFilter); MDInfo metaDataInfo(g_pDisp,(LPCWSTR)pwzFileName, DumpMI, g_ulMetaInfoFilter); metaDataInfo.SetVEHandlerReporter((__int64) (size_t) VEHandlerReporter); metaDataInfo.DisplayMD(); - if(!(g_Mode & MODE_GUI)) - printLine(GUICookie,RstrUTF(IDS_E_MIEND)); + printLine(GUICookie,RstrUTF(IDS_E_MIEND)); } } DumpMI((char*)-1); // reset the print function for DumpMetaInfo @@ -7442,7 +7318,6 @@ BOOL DumpFile() const char *pszFilename = g_szInputFile; const DWORD openFlags = ofRead | (g_fProject ? 0 : ofNoTransform); - if(!(g_Mode & MODE_GUI)) { if(g_fDumpHTML) { @@ -7465,8 +7340,7 @@ BOOL DumpFile() char* pch = strrchr(g_szInputFile,'.'); if(pch && (!_stricmp(pch+1,"lib") || !_stricmp(pch+1,"obj"))) { - if(!(g_Mode & MODE_GUI)) - DumpMetaInfo(g_wszFullInputFile,g_pszObjFileName,g_pFile); + DumpMetaInfo(g_wszFullInputFile,g_pszObjFileName,g_pFile); return FALSE; } } @@ -7542,21 +7416,12 @@ BOOL DumpFile() g_cbMetaData = VAL32(g_CORHeader->MetaData.Size); } -#ifdef FEATURE_CORECLR if (FAILED(getMetaDataInternalInterface( (BYTE *)g_pMetaData, g_cbMetaData, openFlags, IID_IMDInternalImport, (LPVOID *)&g_pImport))) -#else - if (FAILED(g_pCLRRuntimeHostInternal->GetMetaDataInternalInterface( - (BYTE *)g_pMetaData, - g_cbMetaData, - openFlags, - IID_IMDInternalImport, - (LPVOID *)&g_pImport))) -#endif { if (g_fDumpHeader) DumpHeader(g_CORHeader, g_pFile); @@ -7565,11 +7430,7 @@ BOOL DumpFile() } TokenSigInit(g_pImport); -#ifdef FEATURE_CORECLR if (FAILED(metaDataGetDispenser(CLSID_CorMetaDataDispenser, IID_IMetaDataDispenser, (LPVOID*)&pMetaDataDispenser))) -#else - if (FAILED(CoCreateInstance(CLSID_CorMetaDataDispenser, 0, CLSCTX_INPROC_SERVER, IID_IMetaDataDispenser, (LPVOID*)&pMetaDataDispenser))) -#endif { if (g_fDumpHeader) DumpHeader(g_CORHeader, g_pFile); @@ -7584,31 +7445,6 @@ BOOL DumpFile() goto exit; } -#ifndef FEATURE_CORECLR - // Get a symbol binder. - ISymUnmanagedBinder *binder; - HRESULT hr; - - hr = CoCreateInstance(CLSID_CorSymBinder_SxS, NULL, - CLSCTX_INPROC_SERVER, - IID_ISymUnmanagedBinder, - (void**)&binder); - - if (SUCCEEDED(hr)) - { - hr = binder->GetReaderForFile(g_pPubImport, - wzInputFileName, - NULL, - &g_pSymReader); - - // Release the binder - binder->Release(); - } - - if (FAILED(hr)) - g_fShowSource = FALSE; -#endif - if((g_uNCA = g_pImport->GetCountWithTokenKind(mdtCustomAttribute))) { g_rchCA = new char[g_uNCA+1]; @@ -7636,13 +7472,6 @@ DoneInitialization: } #endif -#ifndef FEATURE_CORECLR - if (g_Mode & MODE_GUI) - { - GUIAddItemsToList(); - } - else -#endif { // Dump the CLR header info if requested. printLine(g_pFile,COMMENT((char*)0)); // start multiline comment @@ -7682,16 +7511,8 @@ DoneInitialization: ulNumGlobalFunc = g_pImport->EnumGetCount(&hEnumMethod); g_pImport->EnumClose(&hEnumMethod); } -#ifndef FEATURE_CORECLR - if(g_fShowProgressBar) - CreateProgressBar((LONG) (g_NumClasses + ulNumGlobalFunc)); -#endif } -#ifndef FEATURE_CORECLR - ProgressStep(); -#endif - g_fAbortDisassembly = FALSE; //DumpVtable(g_pFile); DumpMscorlib(g_pFile); if(g_fDumpTypeList) DumpTypelist(g_pFile); @@ -7734,13 +7555,6 @@ DoneInitialization: if(g_cl_enclosing[i] == mdTypeDefNil) // nested classes are dumped within enclosing ones { DumpClass(g_cl_list[i], VAL32(IMAGE_COR20_HEADER_FIELD(*g_CORHeader, EntryPointToken)),g_pFile,7); //7=everything - if(g_fAbortDisassembly) - { - printError(g_pFile,""); - printError(g_pFile,RstrUTF(IDS_E_DASMABORT)); - fSuccess = FALSE; - goto CloseFileAndExit; - } } } CloseNamespace(szString); @@ -7756,16 +7570,6 @@ DoneInitialization: if(g_rchCA[i] == 0) DumpCustomAttribute(TokenFromRid(i,mdtCustomAttribute),g_pFile,true); } } - if(g_fAbortDisassembly) - { - printError(g_pFile,""); - printError(g_pFile,RstrUTF(IDS_E_DASMABORT)); - fSuccess = FALSE; - goto CloseFileAndExit; - } -#ifndef FEATURE_CORECLR - ProgressStep(); -#endif #if (0) /* Third, dump GC/EH info about the native methods, using the IPMap */ @@ -7947,15 +7751,14 @@ ReportAndExit: DumpRTFPostfix(g_pFile); } +#ifndef _DEBUG CloseFileAndExit: +#endif if(g_pFile) { fclose(g_pFile); g_pFile = NULL; } -#ifndef FEATURE_CORECLR - DestroyProgressBar(); -#endif } exit: diff --git a/src/ildasm/dasm.rc b/src/ildasm/dasm.rc index b16d53ab2f..ea56596f8d 100644 --- a/src/ildasm/dasm.rc +++ b/src/ildasm/dasm.rc @@ -10,9 +10,6 @@ // // Generated from the TEXTINCLUDE 2 resource. // -#ifndef FEATURE_CORECLR -#include "afxres.h" -#endif #include <winresrc.h> ///////////////////////////////////////////////////////////////////////////// @@ -57,250 +54,16 @@ END #endif // APSTUDIO_INVOKED - -#if !defined(FEATURE_PAL) && !defined(FEATURE_CORECLR) - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON2 ICON DISCARDABLE "Litening.ico" - -#if FX_VFT == VFT_DLL - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_FIELD BITMAP MOVEABLE PURE "field.bmp" -IDB_METHOD BITMAP MOVEABLE PURE "method.bmp" -IDB_STATICFIELD BITMAP MOVEABLE PURE "staticfield.bmp" -IDB_STATICMETHOD BITMAP MOVEABLE PURE "staticmethod.bmp" -IDB_REDARROW BITMAP MOVEABLE PURE "redarrow.bmp" -IDB_EVENT BITMAP DISCARDABLE "event.bmp" -IDB_PROP BITMAP DISCARDABLE "prop.bmp" -IDB_NAMESPACE BITMAP DISCARDABLE "namespace.bmp" -IDB_CLASS BITMAP DISCARDABLE "classa.bmp" -IDB_CLASSENUM BITMAP DISCARDABLE "classe.bmp" -IDB_CLASSINT BITMAP DISCARDABLE "classi.bmp" -IDB_CLASSVAL BITMAP DISCARDABLE "classv.bmp" - -IDB_METHOD_GEN BITMAP MOVEABLE PURE "methodg.bmp" -IDB_STATICMETHOD_GEN BITMAP MOVEABLE PURE "staticmethodg.bmp" -IDB_CLASS_GEN BITMAP DISCARDABLE "classag.bmp" -IDB_CLASSENUM_GEN BITMAP DISCARDABLE "classeg.bmp" -IDB_CLASSINT_GEN BITMAP DISCARDABLE "classig.bmp" -IDB_CLASSVAL_GEN BITMAP DISCARDABLE "classvg.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 157, 306 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION -CAPTION "Dump options" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON L"OK",IDOK,13,285,50,14 - PUSHBUTTON L"Cancel",IDCANCEL,81,285,50,14 - GROUPBOX L"Encoding",IDC_STATIC,13,3,129,28 - CONTROL L"ANSI",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,19,16,34,9 - CONTROL L"UTF-8",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,55,16,34, - 9 - CONTROL L"Unicode",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,91,16, - 40,9 - CONTROL L"Dump Class List",IDC_CHECK19,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,36,106,10 - CONTROL L"Dump Statistics",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,48,106,10 - CONTROL L"Show Progress Bar",IDC_CHECK18,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,60,124,11 - CONTROL L"Dump Header",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,73,106,10 - CONTROL L"Dump IL Code",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,86,106,10 - CONTROL L"Token Values",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,99,106,10 - CONTROL L"Actual Bytes",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,110,106,10 - CONTROL L"Line Numbers",IDC_CHECK20,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,120,106,10 - CONTROL L"Source Lines",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,131,106,10 - CONTROL L"Expand try/catch",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,142,106,10 - CONTROL L"Dump Metainfo",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,14,158,106,10 - CONTROL L"More HEX",IDC_CHECK11,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,174,106,10 - CONTROL L"Raw: Counts,Sizes",IDC_CHECK12,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,185,106,10 - CONTROL L"Raw: Header",IDC_CHECK10,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,198,106,10 - CONTROL L"Raw: Header,Schema",IDC_CHECK14,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 37,209,106,10 - CONTROL L"Raw: Header,Schema,Rows",IDC_CHECK15,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,37,222,106,10 - CONTROL L"Raw: Heaps",IDC_CHECK17,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,233,106,10 - CONTROL L"Unresolved Externals",IDC_CHECK13,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 37,246,106,10 - CONTROL L"Validate",IDC_CHECK16,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,37,257,106,10 - CONTROL L"Debug",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, - 37,270,106,10 -END - -IDD_ABOUT DIALOGEX 0, 0, 289, 112 -STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION -EXSTYLE WS_EX_CLIENTEDGE -CAPTION L"About IL DASM" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON L"OK",ID_ABOUT_OK,122,83,50,14 - ICON IDI_ICON2,IDC_STATIC,18,22,21,20,0 - LTEXT L"Static",IDC_ABOUT_LINE1,47,22,279,11 - LTEXT L"Static",IDC_ABOUT_LINE2,47,38,279,11 - LTEXT L"Static",IDC_ABOUT_LINE3,47,56,279,11 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Accelerator -// - -FileAccel ACCELERATORS MOVEABLE PURE -BEGIN - "O", 1, VIRTKEY, CONTROL - "D", 2, VIRTKEY, CONTROL - "T", 3, VIRTKEY, CONTROL - "X", 4, VIRTKEY, CONTROL - "M", 21, VIRTKEY, CONTROL - VK_F1, 31, VIRTKEY - VK_ESCAPE, 4, VIRTKEY -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_DIALOG1, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 150 - TOPMARGIN, 3 - BOTTOMMARGIN, 299 - END - - IDD_ABOUT, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 232 - TOPMARGIN, 7 - BOTTOMMARGIN, 105 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - IDS_FILE L"&File" - IDS_VIEW L"&View" - IDS_HELP L"&Help" - IDS_OPEN L"&Open\tCtrl+O" - IDS_DUMP L"&Dump\tCtrl+D" - IDS_DUMPTREE L"Dump &TreeView\tCtrl+T" - IDS_EXIT L"E&xit\tCtrl+X" - IDS_FONTS L"Set &Fonts" - IDS_FONT_TREE L"&Tree view" - IDS_FONT_DASM L"&Disassembly" - IDS_SORT_BY_NAME L"Sort by &name" - IDS_SHOW_PUB L"Hide &Public" - IDS_SHOW_PRIV L"Hide P&rivate" - IDS_SHOW_FAM L"Hide Famil&y" - IDS_SHOW_ASM L"Hide &Assembly" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_FIND L"&Find" - IDS_FINDNEXT L"Find &Next" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_MI_DEBUG L"&Debug" - IDS_MI_SCHEMA L"Raw:Header,Sch&ema" - IDS_MI_RAW L"Raw:Header,Schema,&Rows" - IDS_MI_HEAPS L"Raw:Hea&ps" - IDS_MI_VALIDATE L"&Validate" - IDS_SHOW_METAINFO L"&Show!\tCtrl+M" - IDS_ABOUT L"&About IL DASM" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_SHOW_FAA L"Hide FamAN&DAssem" - IDS_SHOW_FOA L"Hide Fam&ORAssem" - IDS_SHOW_PSCOPE L"Hide Private&Scope" - IDS_FULL_INFO L"Show member &types" - IDS_BYTES L"Show &bytes" - IDS_TOKENS L"Show token &values" - IDS_SOURCELINES L"Show source &lines" - IDS_QUOTEALLNAMES L"&Quote all names" - IDS_EXPANDTRY L"E&xpand try/catch" - IDS_SHOW_HEADER L"&Headers" - IDS_SHOW_STAT L"Stat&istics" - IDS_METAINFO L"&MetaInfo" - IDS_MI_HEADER L"Raw:&Header" - IDS_MI_HEX L"&More HEX" - IDS_MI_CSV L"Raw:&Counts,Sizes" - IDS_MI_UNREX L"&Unresolved ext." - IDS_TREEVIEWFCN L"Full &Class Names" - IDS_CAVERBAL L"V&erbal CA blobs" - IDS_DUMPRTF L"&Use RTF" -END - -#endif // FX_VFT == VFT_DLL -#endif // !defined(FEATURE_PAL) && !defined(FEATURE_CORECLR) - #if FX_VFT == VFT_DLL STRINGTABLE DISCARDABLE BEGIN IDS_USAGE_TITLE L"ILDASM command line syntax" IDS_USAGE_01 L"Usage: ildasm [options] <file_name> [options]\n\n" IDS_USAGE_02 L"Options for output redirection:\n" -#ifndef FEATURE_PAL - IDS_USAGE_03 L" /OUT=<file name> Direct output to file rather than to GUI.\n" - IDS_USAGE_04 L" /TEXT Direct output to console window rather than to GUI.\n\n" - IDS_USAGE_04A L" /HTML Output in HTML format (valid with /OUT option only).\n" - IDS_USAGE_04B L" /RTF Output in rich text format (invalid with /TEXT option).\n" - IDS_USAGE_05 L"Options for GUI or file/console output (EXE and DLL files only):\n" -#else IDS_USAGE_03 L" /OUT=<file name> Direct output to file rather than to console.\n" - IDS_USAGE_04 L"" IDS_USAGE_04A L" /HTML Output in HTML format (valid with /OUT option only).\n" IDS_USAGE_04B L" /RTF Output in rich text format (valid with /OUT option only).\n" IDS_USAGE_05 L"Options for file/console output:\n" -#endif // !FEATURE_PAL #ifdef OWNER_OPTION_ENABLED IDS_USAGE_06 L" /OWNER=<owner name> Set owner name to disassemble a protected PE file.\n" #endif @@ -322,15 +85,8 @@ BEGIN IDS_USAGE_15 L" /QUOTEALLNAMES Include all names into single quotes.\n" IDS_USAGE_15A L" /NOCA Suppress output of custom attributes.\n" IDS_USAGE_15B L" /CAVERBAL Output CA blobs in verbal form (default - in binary form).\n" -#ifndef FEATURE_PAL - IDS_USAGE_16 L" /NOBAR Suppress disassembly progress bar window pop-up.\n\n" IDS_USAGE_17 L"The following options are valid for file/console output only:\n" IDS_USAGE_18 L"Options for EXE and DLL files:\n" -#else - IDS_USAGE_16 L"" - IDS_USAGE_17 L"" - IDS_USAGE_18 L"" -#endif // !FEATURE_PAL IDS_USAGE_19 L" /UTF8 Use UTF-8 encoding for output (default - ANSI).\n" IDS_USAGE_20 L" /UNICODE Use UNICODE encoding for output.\n" IDS_USAGE_21 L" /NOIL Suppress IL assembler code output.\n" @@ -390,7 +146,6 @@ BEGIN IDS_E_BADCORHDR L"error : Bad CLR header, or the version of the file format is not supported" IDS_E_OPENMD L"error : Failed to open meta data" IDS_E_COPYRIGHT L"error : Copyrighted material - can not disassemble!" - IDS_E_DASMABORT L"********* DISASSEMBLY ABORTED BY THE OPERATOR **************" IDS_E_DASMOK L"*********** DISASSEMBLY COMPLETE ***********************" IDS_E_PARTDASM L"warning : THIS IS A PARTIAL DISASSEMBLY, NOT SUITABLE FOR RE-ASSEMBLING" IDS_E_INSTRDT L"error : Failed to create instruction decoding table" diff --git a/src/ildasm/dasm_pr.cpp b/src/ildasm/dasm_pr.cpp deleted file mode 100644 index 9d478bf9ac..0000000000 --- a/src/ildasm/dasm_pr.cpp +++ /dev/null @@ -1,275 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#include "ildasmpch.h" - -#ifndef FEATURE_CORECLR -#include "resource.h" -#include "formattype.h" - -WCHAR* RstrW(unsigned id); - -extern HINSTANCE g_hInstance; -extern HINSTANCE g_hResources; -extern DWORD g_NumClasses; -extern char g_szInputFile[]; // in UTF-8 -extern char g_szOutputFile[]; // in UTF-8 - -#define IDC_CANCEL 101 - -HWND g_hwndProgress = NULL; -HWND g_hwndProgBox = NULL; -HWND g_hwndFromFile = NULL; -HWND g_hwndToFile = NULL; -HWND g_hwndTally = NULL; -HWND g_hwndCancel = NULL; -HANDLE g_hThreadReady = NULL; // event - -BOOL g_fInitCommonControls = TRUE; -BOOL g_fRegisterClass = TRUE; -ULONG g_ulCount, g_ulRange; -RECT rcClient; // client area of parent window - -WCHAR* UtfToUnicode(__in __nullterminated const char* sz); // defined in dis.cpp - -LRESULT CALLBACK ProgBoxWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) -{ - switch (uMsg) - { - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDC_CANCEL: - g_hwndProgress = NULL; - g_hwndProgBox = NULL; - g_hwndFromFile = NULL; - g_hwndToFile = NULL; - g_hwndTally = NULL; - g_hwndCancel = NULL; - DestroyWindow (hwnd); - break; - } - break; - - - case WM_CLOSE: - g_hwndProgress = NULL; - g_hwndProgBox = NULL; - g_hwndFromFile = NULL; - g_hwndToFile = NULL; - g_hwndTally = NULL; - g_hwndCancel = NULL; - //break; - default: - return WszDefWindowProc(hwnd, uMsg, wParam, lParam); - } - return 0; -} -DWORD WINAPI ProgressMainLoop(LPVOID pv) -{ - MSG msg; - DWORD cyVScroll; - HFONT hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT); //(ANSI_FIXED_FONT); - WCHAR wzStr[1024]; - - if(g_fInitCommonControls) - { - InitCommonControls(); - g_fInitCommonControls = FALSE; - } - g_ulCount = 0; - if(g_fRegisterClass) - { - _ASSERTE(g_hResources != NULL); - WNDCLASSW wndClass; - - wndClass.style = CS_HREDRAW|CS_VREDRAW|CS_NOCLOSE; - wndClass.lpfnWndProc = ProgBoxWndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = g_hInstance; - wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2)); - wndClass.hCursor = NULL; - wndClass.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH); - wndClass.lpszMenuName = NULL; - wndClass.lpszClassName = L"ProgressBox"; - - if (WszRegisterClass(&wndClass) == 0) return 0; - - g_fRegisterClass = FALSE; - } - cyVScroll = GetSystemMetrics(SM_CYVSCROLL); - if(g_hwndProgBox = WszCreateWindowEx (0, - RstrW(IDS_PROGRESSBOX), //"ProgressBox", - RstrW(IDS_DISASSEMBLING), //"Disassembling", - WS_VISIBLE | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_CLIPCHILDREN, - 400, 200, 400, 8*cyVScroll, - HWND_DESKTOP, - (HMENU)0, - g_hInstance, - NULL)) - { - GetClientRect(g_hwndProgBox, &rcClient); - - if(g_hwndFromFile = WszCreateWindowEx (0, - L"STATIC", - L"", - WS_CHILD|WS_VISIBLE|SS_CENTER, - rcClient.left, rcClient.bottom-6*cyVScroll,rcClient.right, cyVScroll, - g_hwndProgBox, - (HMENU)0, - g_hInstance, - NULL)) - { - SendMessageA(g_hwndFromFile,WM_SETFONT,(LPARAM)hFont,FALSE); - WCHAR* wzFileName = UtfToUnicode(g_szInputFile); - if(wcslen(wzFileName) <= 60) swprintf_s(wzStr,1024,RstrW(IDS_PB_FILE) /*"File %s"*/,wzFileName); - else - { - WCHAR * p=wzFileName; - while(p = wcschr(p,L'\\')) - { - if(wcslen(p) <= 60) break; - p++; - } - if(p == NULL) p = &wzFileName[wcslen(wzFileName)-50]; - swprintf_s(wzStr,1024,RstrW(IDS_PB_FILE1) /*"File ...%s"*/,p); - } - WszSendMessage(g_hwndFromFile, WM_SETTEXT,0,(LPARAM)wzStr); - } - if(g_hwndToFile = WszCreateWindowEx (0, - L"STATIC", - L"", - WS_CHILD|WS_VISIBLE|SS_CENTER, - rcClient.left, rcClient.bottom-5*cyVScroll,rcClient.right, cyVScroll, - g_hwndProgBox, - (HMENU)0, - g_hInstance, - NULL)) - { - SendMessageA(g_hwndToFile,WM_SETFONT,(LPARAM)hFont,FALSE); - WCHAR* wzFileName = UtfToUnicode(g_szOutputFile); - if(wcslen(wzFileName) <= 60) swprintf_s(wzStr,1024,RstrW(IDS_PB_TOFILE) /*"To file %s"*/,wzFileName); - else - { - WCHAR * p=wzFileName; - while(p = wcschr(p,L'\\')) - { - if(wcslen(p) <= 60) break; - p++; - } - if(p == NULL) p = &wzFileName[wcslen(wzFileName)-50]; - swprintf_s(wzStr,1024,RstrW(IDS_PB_TOFILE1) /*"To file ...%s"*/,p); - } - WszSendMessage(g_hwndToFile, WM_SETTEXT,0,(LPARAM)wzStr); - } - if(g_hwndTally = WszCreateWindowEx (0, - L"STATIC", - L"", - WS_CHILD|WS_VISIBLE|SS_CENTER, - rcClient.left, rcClient.bottom-4*cyVScroll,rcClient.right, cyVScroll, - g_hwndProgBox, - (HMENU)0, - g_hInstance, - NULL)) - { - SendMessageA(g_hwndTally,WM_SETFONT,(LPARAM)hFont,FALSE); - if(g_ulCount <= g_NumClasses) swprintf_s(wzStr,1024,RstrW(IDS_PB_CLASSESDONE) /*"%d classes, %d done"*/,g_NumClasses,g_ulCount); - else swprintf_s(wzStr,1024,RstrW(IDS_PB_GLOBALSDONE) /*"%d global methods, %d done"*/,g_ulRange-g_NumClasses,g_ulCount-g_NumClasses); - WszSendMessage(g_hwndTally, WM_SETTEXT,0,(LPARAM)wzStr); - } - if(g_hwndProgress = WszCreateWindowEx (0, - PROGRESS_CLASS, - L"", - WS_CHILD|WS_VISIBLE|SS_CENTER, // SS_CENTER gives smooth progress and solid bar - rcClient.left, rcClient.bottom-3*cyVScroll,rcClient.right, cyVScroll, - g_hwndProgBox, - (HMENU)0, - g_hInstance, - NULL)) - { - // Set the range for the progress bar. - SendMessageA (g_hwndProgress, PBM_SETRANGE, 0L, MAKELPARAM(0, g_ulRange)); - // Set the step. - SendMessageA (g_hwndProgress, PBM_SETSTEP, (WPARAM)1, 0L); - } - if(g_hwndCancel = WszCreateWindowEx (0, - L"BUTTON", - RstrW(IDS_PB_CANCEL), //"Cancel", - WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON|BS_TEXT, - rcClient.left+150, rcClient.bottom-3*cyVScroll/2,rcClient.right-300, 4*cyVScroll/3, - g_hwndProgBox, - (HMENU)IDC_CANCEL, - g_hInstance, - NULL)) - { - SendMessageA(g_hwndCancel,WM_SETFONT,(LPARAM)hFont,FALSE); - } - } - SetEvent(g_hThreadReady); - while (WszGetMessage(&msg, NULL, 0, 0)) - { - TranslateMessage(&msg); - WszDispatchMessage(&msg); - } - return 0; -} - -void CreateProgressBar(LONG lRange) -{ - DWORD dwThreadID; - g_ulCount = 0; - if((g_ulRange = (ULONG)lRange)==0) return; - - g_hThreadReady = WszCreateEvent(NULL,FALSE,FALSE,NULL); - if (g_hThreadReady != NULL) - { - // Thread is never aborted, it always exits by itself - HANDLE hThread = CreateThread(NULL,0,ProgressMainLoop,NULL,0,&dwThreadID); - if (hThread != NULL) - { - CloseHandle(hThread); - WaitForSingleObject(g_hThreadReady,INFINITE); - } - CloseHandle(g_hThreadReady); - } -} - -BOOL ProgressStep() -{ - if(g_hwndProgBox) - { - WCHAR wzStr[1024]; - if(g_hwndTally) - { - if(g_ulCount <= g_NumClasses) - swprintf_s(wzStr,1024,RstrW(IDS_PB_CLASSESDONE) /*"%d classes, %d done"*/,g_NumClasses,g_ulCount); - else if(g_ulCount <= g_ulRange) - swprintf_s(wzStr,1024,RstrW(IDS_PB_GLOBALSDONE) /*"%d global methods, %d done"*/,g_ulRange-g_NumClasses,g_ulCount-g_NumClasses); - else - wcscpy_s(wzStr,1024,RstrW(IDS_PB_WRITINGDATA)); //"Writing global data"); - wzStr[1023]=0; - WszSendMessage(g_hwndTally, WM_SETTEXT,0,(LPARAM)wzStr); - } - - if(g_hwndProgress && g_ulCount && (g_ulCount <= g_ulRange)) - WszSendMessage (g_hwndProgress, PBM_STEPIT, 0L, 0L); - g_ulCount++; - } - else if(g_ulCount) return FALSE; // disassembly started and was aborted - return TRUE; -} - -void DestroyProgressBar() -{ - if(g_hwndProgBox) WszSendMessage (g_hwndProgBox,WM_COMMAND,IDC_CANCEL,0); - g_hwndProgress = NULL; - g_hwndProgBox = NULL; - g_hwndFromFile = NULL; - g_hwndToFile = NULL; - g_hwndTally = NULL; - g_hwndCancel = NULL; - g_ulCount = 0; -} -#endif diff --git a/src/ildasm/dasmgui.h b/src/ildasm/dasmgui.h deleted file mode 100644 index aa1747e01b..0000000000 --- a/src/ildasm/dasmgui.h +++ /dev/null @@ -1,15 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -BOOL CreateGUI(); -void GUISetModule(__in __nullterminated const char *pszModule); -void GUIMainLoop(); -void GUIAddOpcode(__inout_opt __nullterminated const char *szString, __in_opt void *GUICookie); -BOOL GUIAddItemsToList(); -void GUIAddOpcode(__inout __nullterminated const char *szString); -void DestroyGUI(); -UINT GetDasmMBRTLStyle(); - -BOOL DisassembleMemberByName(__in __nullterminated const char *pszClassName, __in __nullterminated const char *pszMemberName, __in __nullterminated const char *pszSig); -BOOL IsGuiILOnly(); diff --git a/src/ildasm/dasmhlp.hhc b/src/ildasm/dasmhlp.hhc deleted file mode 100644 index dcedac2abb..0000000000 --- a/src/ildasm/dasmhlp.hhc +++ /dev/null @@ -1,32 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> -<HTML> -<HEAD> -<meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1"> -<!-- Sitemap 1.0 --> -</HEAD><BODY> -<OBJECT type="text/site properties"> - <param name="Window Styles" value="0x800021"> -</OBJECT> -<UL> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Menu Options"> - <param name="Local" value="html\menu_options.htm"> - <param name="URL" value="html\menu_options.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Tree View Icons"> - <param name="Local" value="html\tree_view_icons.htm"> - <param name="URL" value="html\tree_view_icons.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Clicking on Tree View Items"> - <param name="Local" value="html\clicking.htm"> - <param name="URL" value="html\clicking.htm"> - </OBJECT> - <LI> <OBJECT type="text/sitemap"> - <param name="Name" value="Keyboard Commands"> - <param name="Local" value="html\keyboard.htm"> - <param name="URL" value="html\keyboard.htm"> - </OBJECT> -</UL> -</BODY></HTML> diff --git a/src/ildasm/dirs.proj b/src/ildasm/dirs.proj deleted file mode 100644 index 86d561e3f8..0000000000 --- a/src/ildasm/dirs.proj +++ /dev/null @@ -1,15 +0,0 @@ -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" /> - <!--Leaf project Properties--> - <!--The following projects will build during PHASE 1--> - <PropertyGroup> - <BuildInPhaseDefault>false</BuildInPhaseDefault> - <BuildInPhase1>true</BuildInPhase1> - </PropertyGroup> - <ItemGroup Condition="'$(BuildExePhase)' == '1'"> - <ProjectFile Include="exe\ildasm.nativeproj" /> - <ProjectFile Include="rcdll\ildasmrc.nativeproj" /> - </ItemGroup> - <!--Import the targets--> - <Import Project="$(_NTDRIVE)$(_NTROOT)\tools\Microsoft.DevDiv.Traversal.targets" /> -</Project> diff --git a/src/ildasm/dis.cpp b/src/ildasm/dis.cpp index 371466feee..2b3229e920 100644 --- a/src/ildasm/dis.cpp +++ b/src/ildasm/dis.cpp @@ -10,7 +10,6 @@ #include "debugmacros.h" #include "corpriv.h" #include "dasmenum.hpp" -#include "dasmgui.h" #include "formattype.h" #include "dis.h" #include "resource.h" @@ -133,11 +132,6 @@ char* AnsiToUtf(__in __nullterminated const char* sz) { return UnicodeToUtf(Ansi static void UnicodeToConsoleOrMsgBox(__in __nullterminated const WCHAR* wz) { -#ifndef FEATURE_CORECLR - if (g_Mode & MODE_GUI) - WszMessageBox(NULL,wz,RstrW(IDS_ERRORCAPTION),MB_OK|MB_ICONERROR|GetDasmMBRTLStyle()); - else -#endif { //DWORD dw; //char* sz = UnicodeToAnsi(wz); @@ -155,11 +149,6 @@ static void UnicodeToFile(__in __nullterminated const WCHAR* wz, FILE* pF) } static void ToGUIOrFile(__in __nullterminated const char* sz, void* GUICookie) { -#ifndef FEATURE_CORECLR - if (g_Mode & MODE_GUI) - GUIAddOpcode(sz, GUICookie); - else -#endif { if(g_fDumpRTF) fprintf((FILE*)GUICookie,"%s\\line\n",sz); else fprintf((FILE*)GUICookie,"%s\n",sz); @@ -168,8 +157,6 @@ static void ToGUIOrFile(__in __nullterminated const char* sz, void* GUICookie) //------------------------------------------------------------------ void printError(void* GUICookie, __in __nullterminated const char* string) { - if(g_Mode & MODE_GUI) printLine(GUICookie, ERRORMSG(string)); - else { //DWORD dw; const char* sz = ERRORMSG(string); @@ -198,7 +185,7 @@ void printLine(void* GUICookie, __in __nullterminated const char* string) { sz = UnicodeToAnsi(wz); } - else if(GUICookie && (!(g_Mode & MODE_GUI))) + else if(GUICookie) { UnicodeToFile(wz,(FILE*)GUICookie); return; @@ -219,11 +206,8 @@ void printLineW(void* GUICookie, __in __nullterminated const WCHAR* string) } if(g_uCodePage == 0xFFFFFFFF) { - if(!(g_Mode & MODE_GUI)) - { - UnicodeToFile(string,(FILE*)GUICookie); - return; - } + UnicodeToFile(string,(FILE*)GUICookie); + return; } else if(g_uCodePage == CP_UTF8) sz = UnicodeToUtf(string); @@ -1083,15 +1067,7 @@ BOOL Disassemble(IMDInternalImport *pImport, BYTE *ILHeader, void *GUICookie, md PC = 0; fTryInCode = enumEHInfo(method.EH, pImport, method.GetCodeSize()); DasmExceptionInfoClause* ehInfoToPutNext = NULL; - if(g_Mode & MODE_GUI) - { // in GUI, reset everything for each method - ulWasFileToken = 0xFFFFFFFF; - memset(&guidWasLang,0,sizeof(GUID)); - memset(&guidWasLangVendor,0,sizeof(GUID)); - memset(&guidWasDoc,0,sizeof(GUID)); - memset(wzWasFileName,0,sizeof(wzWasFileName)); - ulWasLine = 0; - } + while (PC < method.GetCodeSize()) { DWORD Len; @@ -1117,8 +1093,7 @@ BOOL Disassemble(IMDInternalImport *pImport, BYTE *ILHeader, void *GUICookie, md if (fNeedNewLine) { fNeedNewLine = FALSE; - if (!(g_Mode & MODE_GUI)) - printLine(GUICookie,""); + printLine(GUICookie,""); } if(fShowSource || fInsertSourceLines) diff --git a/src/ildasm/dis.h b/src/ildasm/dis.h index 595e097ae6..9a1af93943 100644 --- a/src/ildasm/dis.h +++ b/src/ildasm/dis.h @@ -152,24 +152,24 @@ char *DumpGenericPars(__inout_ecount(SZSTRING_SIZE) char* szString, #define CHECK_REMAINING_SIZE if(ovadd_le((size_t)szString, SZSTRING_SIZE_M4, (size_t)szptr)) break; #define SZSTRING_REMAINING_SIZE(x) (ovadd_le((size_t)szString,SZSTRING_SIZE,(size_t)(x))?0:(SZSTRING_SIZE-((size_t)(x)-(size_t)szString))) -typedef int (*MetaDataGetDispenserFunc) ( +typedef int (STDAPICALLTYPE *MetaDataGetDispenserFunc) ( REFCLSID rclsid, // The class to desired. REFIID riid, // Interface wanted on class factory. LPVOID FAR *ppv); // Return interface pointer here. -typedef int (*GetMetaDataInternalInterfaceFunc) ( +typedef int (STDAPICALLTYPE *GetMetaDataInternalInterfaceFunc) ( LPVOID pData, // [IN] in memory metadata section ULONG cbData, // [IN] size of the metadata section DWORD flags, // [IN] CorOpenFlags REFIID riid, // [IN] desired interface void **ppv); // [OUT] returned interface -typedef int (*GetMetaDataInternalInterfaceFromPublicFunc) ( +typedef int (STDAPICALLTYPE *GetMetaDataInternalInterfaceFromPublicFunc) ( IUnknown *pv, // [IN] Given interface REFIID riid, // [IN] desired interface void **ppv); // [OUT] returned interface -typedef int (*GetMetaDataPublicInterfaceFromInternalFunc) ( +typedef int (STDAPICALLTYPE *GetMetaDataPublicInterfaceFromInternalFunc) ( void *pv, // [IN] Given interface REFIID riid, // [IN] desired interface void **ppv); // [OUT] returned interface diff --git a/src/ildasm/dman.cpp b/src/ildasm/dman.cpp index d0b525556b..30724fc795 100644 --- a/src/ildasm/dman.cpp +++ b/src/ildasm/dman.cpp @@ -10,7 +10,6 @@ #include "debugmacros.h" #include "corpriv.h" #include "dasmenum.hpp" -#include "dasmgui.h" #include "formattype.h" #include "dis.h" @@ -727,7 +726,7 @@ static void DumpResourceFile(void *GUICookie, BYTE *pRes, DWORD dwOffset, LPCWST memcpy(&L,pParam->pRes+pParam->dwOffset,sizeof(DWORD)); sprintf_s(szString,SZSTRING_SIZE,COMMENT("%s// Offset: 0x%8.8X Length: 0x%8.8X"), g_szAsmCodeIndent,pParam->dwOffset,L); printLine(pParam->GUICookie,szString); - if ((!(g_Mode & MODE_GUI)) && (g_pFile != NULL)) // embedded resource -- dump as .resources file + if (g_pFile != NULL) // embedded resource -- dump as .resources file { FILE *pF = NULL; _wfopen_s(&pF, pParam->wzFileName, W("wb")); @@ -942,11 +941,6 @@ void DumpManifestResources(void* GUICookie) else nManRes=0; } -#ifndef FEATURE_CORECLR -// CLR internal hosting API -extern ICLRRuntimeHostInternal *g_pCLRRuntimeHostInternal; -#endif - IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie) { struct Param @@ -996,7 +990,6 @@ IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie) if(pdwSize && *pdwSize) { pbManifest += sizeof(DWORD); -#ifdef FEATURE_CORECLR if (SUCCEEDED(hr = getMetaDataInternalInterface( pbManifest, VAL32(*pdwSize), @@ -1008,19 +1001,6 @@ IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie) pParam->pImport, IID_IMetaDataAssemblyImport, (LPVOID *)&pParam->pAssemblyImport))) -#else - if (SUCCEEDED(hr = g_pCLRRuntimeHostInternal->GetMetaDataInternalInterface( - pbManifest, - VAL32(*pdwSize), - ofRead, - IID_IMDInternalImport, - (LPVOID *)&pParam->pImport))) - { - if (FAILED(hr = g_pCLRRuntimeHostInternal->GetMetaDataPublicInterfaceFromInternal( - pParam->pImport, - IID_IMetaDataAssemblyImport, - (LPVOID *)&pParam->pAssemblyImport))) -#endif { sprintf_s(szString,SZSTRING_SIZE,RstrUTF(IDS_E_MDAFROMMDI),hr); printLine(pParam->GUICookie,COMMENT(szString)); diff --git a/src/ildasm/dres.cpp b/src/ildasm/dres.cpp index 53e1925cea..93e8e48c93 100644 --- a/src/ildasm/dres.cpp +++ b/src/ildasm/dres.cpp @@ -11,7 +11,6 @@ #include "debugmacros.h" #include "corpriv.h" #include "dasmenum.hpp" -#include "dasmgui.h" #include "formattype.h" #include "dis.h" #include "resource.h" diff --git a/src/ildasm/event.bmp b/src/ildasm/event.bmp Binary files differdeleted file mode 100644 index 99c3357d95..0000000000 --- a/src/ildasm/event.bmp +++ /dev/null diff --git a/src/ildasm/exe/CMakeLists.txt b/src/ildasm/exe/CMakeLists.txt index 87cdd230f9..bf09be58b6 100644 --- a/src/ildasm/exe/CMakeLists.txt +++ b/src/ildasm/exe/CMakeLists.txt @@ -27,12 +27,10 @@ set(ILDASM_SOURCES ../dasm.cpp ../dasm_formattype.cpp ../dasm_mi.cpp - ../dasm_pr.cpp ../dasm_sz.cpp ../dis.cpp ../dman.cpp ../dres.cpp - ../gui.cpp ../ildasmpch.cpp ../windasm.cpp ) @@ -73,4 +71,4 @@ else() ) endif(CLR_CMAKE_PLATFORM_UNIX) -install_clr(ildasm)
\ No newline at end of file +install_clr(ildasm) diff --git a/src/ildasm/exe/ildasm.nativeproj b/src/ildasm/exe/ildasm.nativeproj deleted file mode 100644 index 1a0583f457..0000000000 --- a/src/ildasm/exe/ildasm.nativeproj +++ /dev/null @@ -1,72 +0,0 @@ -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood"> - <!--Modify this before importing the clr-wide settings--> - <PropertyGroup> - <ClrDontIncludeAllInterfaces>true</ClrDontIncludeAllInterfaces> - </PropertyGroup> - <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" /> - <!--Leaf project Properties--> - <PropertyGroup> - <IsDesktopTool>true</IsDesktopTool> - <UseAtl>true</UseAtl> - <AtlVer>mfc</AtlVer> - <EntryPoint>winmain</EntryPoint> - <LinkSubsystem>console</LinkSubsystem> - - <!-- PCH baloney --> - <EnableCxxPCHHeaders>true</EnableCxxPCHHeaders> - <PCHCompile>..\ildasmpch.cpp</PCHCompile> - <PCHHeader>ildasmpch.h</PCHHeader> - - <CDefines>$(CDefines);__TODO_PORT_TO_WRAPPERS__</CDefines> - <LinkUseCMT>true</LinkUseCMT> - <UseMsvcrt>false</UseMsvcrt> - </PropertyGroup> - - <PropertyGroup> - <UserIncludes>$(UserIncludes);.;$(_NTDRIVE)$(_NTROOT)\ndp\clr\src\tools\metainfo</UserIncludes> - <CDefines>$(CDefines);UNICODE;_UNICODE;FEATURE_NO_HOST;__ILDASM__</CDefines> - <OutputName>ildasm</OutputName> - <FileToMarkForSigning>$(BinariesDirectory)\ildasm.exe</FileToMarkForSigning> - <TargetType>PROGRAM</TargetType> - <LinkGenerateManifest/> - </PropertyGroup> - - <!--Leaf Project Items--> - <ItemGroup> - <LinkPreCrtLibs Include="$(ClrLibPath)\utilcodestaticnohost.lib"> - <ProjectReference>$(ClrSrcDirectory)utilcode\staticnohost\staticnohost.nativeproj</ProjectReference> - </LinkPreCrtLibs> - <LinkPreCrtLibs Include="$(ClrLibPath)\MDHotData.lib"> - <ProjectReference>$(ClrSrcDirectory)md\hotdata\full\mdhotdata.nativeproj</ProjectReference> - </LinkPreCrtLibs> - <TargetLib Include="$(ClrLibPath)\corguids.lib"> - <ProjectReference>$(ClrSrcDirectory)inc\corguids.nativeproj</ProjectReference> - </TargetLib> - <TargetLib Include="$(SdkLibPath)\mscoree.lib" /> - <TargetLib Include="$(SdkLibPath)\gdi32.lib" /> - <TargetLib Include="$(SdkLibPath)\comctl32.lib" /> - <TargetLib Include="$(SdkLibPath)\comdlg32.lib" /> - <TargetLib Include="$(SdkLibPath)\ole32.lib" /> - <TargetLib Include="$(SdkLibPath)\uuid.lib" /> - <TargetLib Include="$(SdkLibPath)\user32.lib" /> - <TargetLib Include="$(SdkLibPath)\shell32.lib" /> - <TargetLib Include="$(SdkLibPath)\oleaut32.lib" /> - <TargetLib Include="$(SdkLibPath)\htmlhelp.lib" /> - </ItemGroup> - <ItemGroup> - <RCResourceFile Include="..\dasm.rc" /> - <CppCompile Include="..\dasm_pr.cpp" /> - <CppCompile Include="..\gui.cpp" /> - <CppCompile Include="..\dis.cpp" /> - <CppCompile Include="..\dman.cpp" /> - <CppCompile Include="..\dres.cpp" /> - <CppCompile Include="..\ceeload.cpp" /> - <CppCompile Include="..\dasm_formatType.cpp" /> - <CppCompile Include="..\dasm_mi.cpp" /> - <CppCompile Include="..\dasm_sz.cpp" /> - <CppCompile Include="..\dasm.cpp" /> - <CppCompile Include="..\windasm.cpp" /> - <DataFile Include="..\ildasm.chm" /> - </ItemGroup> - <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" /> -</Project> diff --git a/src/ildasm/field.bmp b/src/ildasm/field.bmp Binary files differdeleted file mode 100644 index aa09fb2f54..0000000000 --- a/src/ildasm/field.bmp +++ /dev/null diff --git a/src/ildasm/gui.cpp b/src/ildasm/gui.cpp deleted file mode 100644 index 83501e66ef..0000000000 --- a/src/ildasm/gui.cpp +++ /dev/null @@ -1,4013 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#include "ildasmpch.h" - -#ifndef FEATURE_CORECLR -#include "debugmacros.h" -#include "corpriv.h" -#include "ceeload.h" -#include "dasmgui.h" -#include "dasmenum.hpp" -#include "dis.h" -#include "resource.h" -#include "gui.h" -#include "formattype.h" -#include "..\tools\metainfo\mdinfo.h" -#include <NdpVersion.h> - -struct MemberInfo { - const char *pszMemberName; - DWORD dwAttrs; - ULONG cComSig; - PCCOR_SIGNATURE pComSig; - mdToken token; -}; - -int __cdecl memberCmp(const void *elem1, const void *elem2 ) { - MemberInfo* mem1 = (MemberInfo*) elem1; - MemberInfo* mem2 = (MemberInfo*) elem2; - return(strcmp(mem1->pszMemberName, mem2->pszMemberName)); -} - -// -// Global buffer, filled by AddOPCode -// -char *GlobalBuffer = new (nothrow) char[65535]; -ULONG GlobalBufferLen = 65535; -ULONG InGlobalBuffer; -// -// Global HINSTANCE -// -extern HINSTANCE g_hInstance; -extern HINSTANCE g_hResources; - -// -// Main window -// -HWND g_hwndMain; - -// -// Treeview for main window -// -HWND g_hwndTreeView; - -// -// Treeview class full name / partial name switch -// -BOOL g_fTreeViewFCN = TRUE; - -// -// Assembly info window (child of main) -// -HWND g_hwndAsmInfo; -extern IMetaDataAssemblyImport* g_pAssemblyImport; -void DumpAssembly(void* GUICookie, BOOL fFullDump); -IMetaDataAssemblyImport* GetAssemblyImport(void* GUICookie); - -// -// Global image list -// -HIMAGELIST g_hImageList; - -// -// Menu for main window -// -HMENU g_hMenu, g_hMetaInfoMenu, g_hFileMenu, g_hViewMenu, g_hFontMenu; - -// -// Flags -// -BOOL g_fFullMemberInfo = FALSE; // Show member type? (method, field, event, prop) -BOOL g_fSortByName = TRUE; // Sort members in tree? -// -// Module name of loaded DLL/EXE -// -const char *g_pszModule; - -// -// Interlocked variable for setting char dimensions once -// -long g_SetCharDimensions = 0; - -unsigned g_uFindReplaceMsg = 0; -HWND g_hFindText = NULL; -// -// Bitmap handles -// -HBITMAP g_hBitmaps[LAST_IMAGE_INDEX]; - -// -// Root item for listview -// -HTREEITEM g_hRoot; - -// Global graphics -HBRUSH g_hWhiteBrush; -HFONT g_hFixedFont; -HFONT g_hSmallFont; -HBITMAP g_hMethodBmp, g_hFieldBmp, g_hClassBmp, g_hStaticMethodBmp, g_hStaticFieldBmp, g_hQuestionBmp; -LOGFONTW g_strLogFontTree, g_strLogFontDasm; -CHOOSEFONTW g_strChFontTree, g_strChFontDasm; - -struct GUI_Info -{ - LOGFONTW* plfTree; - LOGFONTW* plfDasm; - int x; - int y; - int w; - int h; -}; - -GUI_Info guiInfo = {&g_strLogFontTree, &g_strLogFontDasm, CW_USEDEFAULT, CW_USEDEFAULT, 400,600}; - -// Text info -long g_Height; -long g_MaxCharWidth; - -// Currently selected treeview item -HTREEITEM g_CurSelItem; - -extern IMAGE_COR20_HEADER * g_CORHeader; -extern BOOL g_fDumpTokens; -extern BOOL g_fShowBytes; -extern BOOL g_fShowSource; -extern BOOL g_fTryInCode; -extern BOOL g_fQuoteAllNames; -extern BOOL g_fCAVerbal; -extern BOOL g_fShowProgressBar; -extern BOOL g_fDumpHeader; -extern BOOL g_fDumpAsmCode; -extern BOOL g_fDumpTokens; -extern BOOL g_fDumpStats; -extern BOOL g_fDumpMetaInfo; -extern BOOL g_fDumpClassList; -extern BOOL g_fInsertSourceLines; - -extern BOOL g_fLimitedVisibility; -extern BOOL g_fHidePub; -extern BOOL g_fHidePriv; -extern BOOL g_fHideFam; -extern BOOL g_fHideAsm; -extern BOOL g_fHideFAA; -extern BOOL g_fHideFOA; -extern BOOL g_fHidePrivScope; -extern BOOL g_fTDC; - -extern char g_szInputFile[]; // in UTF-8 -extern WCHAR g_wszFullInputFile[]; // in UTF-16 -extern ULONG g_ulMetaInfoFilter; -extern char g_szOutputFile[]; // in UTF-8 -extern DWORD g_Mode; -extern FILE* g_pFile; -extern HINSTANCE g_hInstance; - -extern unsigned g_uCodePage; -extern unsigned g_uConsoleCP; -DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName); // see DRES.CPP -// -// Functions -// -BOOL RegisterWindowClasses(); -HWND CreateTreeView(HWND hwndParent); -HTREEITEM AddOneItem(HTREEITEM hParent, const char *pszText, HTREEITEM hInsAfter, int iImage, HWND hwndTree, BOOL fExpanded); -HWND GUIDisassemble(mdTypeDef cl, mdToken mbMember, __in __nullterminated char *pszWindowTitle); -HTREEITEM AddClassToTreeView(HTREEITEM hParent, mdTypeDef cl); -void AddGlobalFunctions(); -void CreateMenus(); -Namespace_t* FindNamespace(const char *pszNamespace); -void GUICleanupClassItems(); -void SelectClassByName(__in __nullterminated char *pszFQName); -void SelectClassByToken(mdToken tk); -void DumpTreeItem(HTREEITEM hItem, FILE* pFile, __inout __nullterminated WCHAR* szIndent); -HTREEITEM FindCreateNamespaceRoot(const char *pszNamespace); -FILE* OpenOutput(__in __nullterminated const char* szFileName); -FILE* OpenOutput(__in __nullterminated const WCHAR* wzFileName); - -#undef SendMessageW -#undef PostMessageW -#undef CreateWindowExW -#undef DefWindowProcW -#undef RegisterClassExW -#undef RegisterClassW -#undef SetWindowTextW -#undef GetWindowTextW -#undef MessageBoxW - -char* UtfToAnsi(__in __nullterminated const char* sz) { return UnicodeToAnsi(UtfToUnicode(sz));} - -LRESULT CALLBACK DisassemblyWndProc( - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -); - -LRESULT CALLBACK MainWndProc( - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -); - -ClassItem_t *AddClassToGUI(mdTypeDef cl, UINT uImageIndex, - const char *pszNamespace, const char *pszClassName, DWORD cSubItems, HTREEITEM *phRoot); - -void AddMethodToGUI( - mdTypeDef cl, - ClassItem_t * pClassItem, - const char *pszNamespace, - const char *pszClassName, - const char *pszMethodName, - PCCOR_SIGNATURE pComSig, - unsigned cComSig, - mdMethodDef mbMethod, - DWORD dwAttrs -); - -void AddFieldToGUI( - mdTypeDef cl, - ClassItem_t *pClassItem, - const char *pszNamespace, - const char *pszClassName, - const char *pszFieldName, - const char *pszSignature, - mdFieldDef mbField, - DWORD dwAttrs -); - -void AddEventToGUI( - mdTypeDef cl, - ClassItem_t *pClassItem, - const char *pszNamespace, - const char *pszClassName, - DWORD dwClassAttrs, - mdEvent mbEvent -); - -void AddPropToGUI( - mdTypeDef cl, - ClassItem_t *pClassItem, - const char *pszNamespace, - const char *pszClassName, - DWORD dwClassAttrs, - mdProperty mbProp -); - -DynamicArray<DisasmBox_t> *g_DisasmBox; -DWORD g_NumDisasmBoxes=0; - -DynamicArray<ClassItem_t> *g_ClassItemList; -DWORD g_NumClassItems=0; - -DynamicArray<Namespace_t> *g_NamespaceList; -DWORD g_NumNamespaces=0; - - -ClassItem_t *FindClassItem(HTREEITEM hItem); -ClassItem_t *FindClassItem(mdTypeDef cl); -ClassItem_t *FindClassItem(__in_opt __nullterminated char *pszNamespace, __in __nullterminated char *pszName); - -// Find disasm box among opened by class and member tokens -DisasmBox_t* FindDisasmBox(mdToken tkClass, mdToken tkMember) -{ - for (DWORD i = 0; i < g_NumDisasmBoxes; i++) - { - if (((*g_DisasmBox)[i].tkClass == tkClass) - &&((*g_DisasmBox)[i].tkMember == tkMember)) - return &(*g_DisasmBox)[i]; - } - return NULL; -} -// Find disasm box among opened by the container hwnd -DisasmBox_t* FindDisasmBoxByHwnd(HWND hwndContainer) -{ - for (DWORD i = 0; i < g_NumDisasmBoxes; i++) - { - if ((*g_DisasmBox)[i].hwndContainer == hwndContainer) - return &(*g_DisasmBox)[i]; - } - return NULL; -} -// -// Add a new disassembly box to the global list of them -// -// hwndContainer - parent window -// hwndChild - listview -// -void AddDisasmBox(HWND hwndContainer, HWND hwndChild, HMENU hMenu, mdToken tkClass, mdToken tkMember) -{ - (*g_DisasmBox)[g_NumDisasmBoxes].hwndContainer = hwndContainer; - (*g_DisasmBox)[g_NumDisasmBoxes].hwndChild = hwndChild; - (*g_DisasmBox)[g_NumDisasmBoxes].hMenu = hMenu; - (*g_DisasmBox)[g_NumDisasmBoxes].tkClass = tkClass; - (*g_DisasmBox)[g_NumDisasmBoxes].tkMember = tkMember; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lStructSize = sizeof(FINDREPLACEW); - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.hwndOwner = hwndContainer; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.Flags = FR_DOWN|FR_DIALOGTERM; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpstrFindWhat = (LPWSTR)((*g_DisasmBox)[g_NumDisasmBoxes].wzFind); - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpstrReplaceWith = NULL; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.wFindWhatLen = 120; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.wReplaceWithLen = 0; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lCustData = 0; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpfnHook = NULL; - (*g_DisasmBox)[g_NumDisasmBoxes].strFR.lpTemplateName = NULL; - g_NumDisasmBoxes++; -} - -void UpdateDisasmBox(DisasmBox_t* pBox, HWND hwndContainer, HWND hwndChild, HMENU hMenu) -{ - pBox->hwndContainer = hwndContainer; - pBox->hwndChild = hwndChild; - pBox->hMenu = hMenu; - pBox->strFR.hwndOwner = hwndContainer; -} -// -// Given a container window, find the associated disassembly window -// -HWND FindAssociatedDisassemblyListBox(HWND hwndContainer) -{ - DWORD i; - - for (i = 0; i < g_NumDisasmBoxes; i++) - { - if ((*g_DisasmBox)[i].hwndContainer == hwndContainer) - return (*g_DisasmBox)[i].hwndChild; - } - - return NULL; -} - -// -// Given a disassembly window, find the associated container window -// -HWND FindAssociatedDisassemblyContainer(HWND hwndChild) -{ - DWORD i; - - for (i = 0; i < g_NumDisasmBoxes; i++) - { - if ((*g_DisasmBox)[i].hwndChild == hwndChild) - return (*g_DisasmBox)[i].hwndContainer; - } - - return NULL; -} - - -void RemoveDisasmBox(HWND hwndContainer) -{ - DWORD i; - - for (i = 0; i < g_NumDisasmBoxes; i++) - { - if ((*g_DisasmBox)[i].hwndContainer == hwndContainer) - { - memcpy(&(*g_DisasmBox)[i], &(*g_DisasmBox)[i+1], (g_NumDisasmBoxes-i-1)*sizeof(DisasmBox_t)); - g_NumDisasmBoxes--; - break; - } - } -} - - -void RemoveItemsFromList() -{ - TreeView_DeleteAllItems(g_hwndTreeView); -} - - -BOOL RefreshList() -{ - GUICleanupClassItems(); - return GUIAddItemsToList(); -} - - -void GUISetModule(__in __nullterminated const char *pszModule) -{ - g_pszModule = pszModule; -} - - -TreeItem_t *FindClassMemberByName(ClassItem_t *pClassItem, - __in __nullterminated char *pszFindName, - __in __nullterminated char *pszFindSig) -{ - HRESULT hr; - DWORD i; - - // do in two passes, fields first - for (i = 0; i < pClassItem->SubItems; i++) - { - TreeItem_t *pItem; - const char *pszMemberName; - const char *pszMemberSig; - DWORD dwAttrs; - - CQuickBytes qbMemberSig; - - PCCOR_SIGNATURE pComSig; - ULONG cComSig; - - - pItem = &pClassItem->pMembers[i]; - if (pItem->Discriminator != TREEITEM_TYPE_MEMBER) - continue; - - if (TypeFromToken(pItem->mbMember) == mdtMethodDef) - { - if (FAILED(g_pImport->GetMethodDefProps(pItem->mbMember, &dwAttrs))) - { - continue; - } - if (FAILED(g_pImport->GetNameOfMethodDef(pItem->mbMember, &pszMemberName))) - { - continue; - } - if (FAILED(g_pImport->GetSigOfMethodDef(pItem->mbMember, &cComSig, &pComSig))) - { - continue; - } - } - else - { - if (FAILED(g_pImport->GetFieldDefProps(pItem->mbMember, &dwAttrs))) - { - continue; - } - if (FAILED(g_pImport->GetNameOfFieldDef(pItem->mbMember, &pszMemberName))) - { - continue; - } - if (FAILED(g_pImport->GetSigOfFieldDef(pItem->mbMember, &cComSig, &pComSig))) - { - continue; - } - } - MAKE_NAME_IF_NONE(pszMemberName,pItem->mbMember); - qbMemberSig.Shrink(0); - pszMemberSig = PrettyPrintSig(pComSig, cComSig, "", &qbMemberSig, g_pImport,NULL); - - // @todo: GUI IL is so that NDView can call into DASM with/GUI; NDView uses Reflection API - // which doesn't let us get a valid signature. - // If GUI IL only, then ignore signature if it's NULL - if (IsGuiILOnly()) { - if (!strcmp(pszMemberName, pszFindName)) { - if ((pszFindSig != NULL) && strcmp(pszMemberSig, pszFindSig)) continue; - return pItem; - } - } else { - if (!strcmp(pszMemberName, pszFindName) && !strcmp(pszMemberSig, pszFindSig)) - return pItem; - } - } - - return NULL; -} - -// Kick of a disassembly window -// Return TRUE if window opened ok, and FALSE if there's an error -BOOL DisassembleMemberByName(__in __nullterminated char *pszClassName, - __in __nullterminated char *pszMemberName, - __in_opt __nullterminated char *pszSig) -{ - char szClassName[MAX_CLASSNAME_LENGTH]; - char szClassNamespace[MAX_CLASSNAME_LENGTH]; - char *pszClassNamespace; - char *p; - - p = ns::FindSep(pszClassName); - if (p == NULL) - { - strcpy_s(szClassName, MAX_CLASSNAME_LENGTH,pszClassName); - pszClassNamespace = NULL; - } - else - { - strncpy_s(szClassNamespace, MAX_CLASSNAME_LENGTH, pszClassName, p - pszClassName); - szClassNamespace[ p - pszClassName ] = '\0'; - pszClassNamespace = szClassNamespace; - - strcpy_s(szClassName, MAX_CLASSNAME_LENGTH, p+1); - } - - ClassItem_t *pClassItem = FindClassItem(pszClassNamespace, szClassName); - - if (pClassItem != NULL) - { - TreeItem_t *pTreeItem; - - pTreeItem = FindClassMemberByName(pClassItem, pszMemberName, pszSig); - - if (pTreeItem != NULL) - { - DWORD dwAttrs; - DWORD dwImplAttrs; - - // What is this member? - - if (TypeFromToken(pTreeItem->mbMember) == mdtMethodDef) - { - char* szText; - HWND fOK=NULL; - if (FAILED(g_pImport->GetMethodDefProps(pTreeItem->mbMember, &dwAttrs))) - { - goto ErrorHere; - } - if (FAILED(g_pImport->GetMethodImplProps(pTreeItem->mbMember, NULL, &dwImplAttrs))) - { - goto ErrorHere; - } - - // Can't be abstract or native - if (IsMdAbstract(dwAttrs) || IsMiInternalCall(dwImplAttrs)) - return FALSE; - - szText = new (nothrow) char[4096]; - if(szText) - { - TVITEMA SelItem; - - // Get the name of this item so that we can title the disassembly window - memset(&SelItem, 0, sizeof(SelItem)); - SelItem.mask = TVIF_TEXT; - SelItem.pszText = szText; - SelItem.hItem = pTreeItem->hItem; - SelItem.cchTextMax = 4095; - - WCHAR* wzText = (WCHAR*)szText; - SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem); - unsigned L = ((unsigned)wcslen(wzText)+1)*3; - char* szUTFText = new (nothrow) char[L]; - if(szUTFText) - { - memset(szUTFText,0,L); - WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL); - delete[] wzText; - szText = szUTFText; - } - - fOK = GUIDisassemble(pClassItem->cl, pTreeItem->mbMember, szText); - delete[] szText; - } - if (fOK == NULL) { - goto ErrorHere; - } - } - } // endif (pTreeItem != NULL) - else { - goto ErrorHere; - } - - } else { - goto ErrorHere; - } - - return TRUE; - -ErrorHere: - char pzText[300]; - sprintf_s(pzText, 300,RstrUTF(IDS_CANTVIEW_TX) /*"Can't view %s::%s(%s)"*/, pszClassName, pszMemberName, pszSig); - - WszMessageBox(g_hwndMain, UtfToUnicode(pzText), RstrW(IDS_CANTVIEW_HD) /*"Can't View IL"*/, MB_OK | MB_ICONERROR | GetDasmMBRTLStyle() ); - - - return FALSE; -} - -//HTREEITEM AddInfoItemToClass(HTREEITEM hParent, ClassItem_t *pClassItem, const char *pszText, const char *pszStoredInfoText) -HTREEITEM AddInfoItemToClass(HTREEITEM hParent, ClassItem_t *pClassItem, const char *pszText, mdToken tk) -{ - _ASSERTE(pClassItem->CurMember < pClassItem->SubItems); - pClassItem->pMembers[pClassItem->CurMember].hItem = AddOneItem( - pClassItem->hItem, pszText, hParent, RED_ARROW_IMAGE_INDEX, g_hwndTreeView, FALSE - ); - pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_INFO; - //pClassItem->pMembers[pClassItem->CurMember].pszText = (char *) pszStoredInfoText; - pClassItem->pMembers[pClassItem->CurMember].mbMember = tk; - pClassItem->CurMember++; - - return pClassItem->pMembers[pClassItem->CurMember-1].hItem; -} - -struct ClassDescr -{ - mdToken tk; - const char* szName; -}; -static int __cdecl classDescrCmp(const void *op1, const void *op2) -{ - return strcmp(((ClassDescr*)op1)->szName,((ClassDescr*)op2)->szName); -} - -unsigned AddClassesWithEncloser(mdToken tkEncloser, HTREEITEM hParent) -{ - unsigned i, N=0; - for (i = 0; i < g_NumClasses; i++) - { - if(g_cl_enclosing[i] == tkEncloser) N++; - } - - if(N) - { - ClassDescr* rClassDescr = new (nothrow) ClassDescr[N]; - const char *pszClassName,*pszNamespace; - for (i = 0, N = 0; i < g_NumClasses; i++) - { - if(g_cl_enclosing[i] == tkEncloser) - { - rClassDescr[N].tk = g_cl_list[i]; - if (FAILED(g_pImport->GetNameOfTypeDef(g_cl_list[i], &pszClassName, &pszNamespace))) - { - pszClassName = pszNamespace = "Invalid TypeDef record"; - } - // doesn't throw here, so rClassDescr doesn't leak - MAKE_NAME_IF_NONE(pszClassName,g_cl_list[i]); - rClassDescr[N].szName = pszClassName; - N++; - } - } - if(g_fSortByName) qsort(&rClassDescr[0],N,sizeof(ClassDescr),classDescrCmp); - for(i = 0; i < N; i++) AddClassToTreeView(hParent,rClassDescr[i].tk); - delete[] rClassDescr; - } - return N; -} - -static int __cdecl stringCmp(const void *op1, const void *op2) -{ - return strcmp(*((char**)op1), *((char**)op2)); - //return(strlen(*((char**)op1)) - strlen(*((char**)op2))); -} - -UINT GetDasmMBRTLStyle() { - UINT RTLMessageBoxStyle = 0; - WCHAR* pwStr = RstrW(IDS_RTL); - if( wcscmp(pwStr, L"RTL_True") == 0) { - RTLMessageBoxStyle = 0x00080000 |0x00100000; // MB_RIGHT || MB_RTLREADING - } - return RTLMessageBoxStyle; -} - -void GUIDumpAssemblyInfo() -{ - memset(GlobalBuffer,0,GlobalBufferLen); - InGlobalBuffer = 0; - if(g_pAssemblyImport==NULL) g_pAssemblyImport = GetAssemblyImport((void*)g_hwndAsmInfo); - if(g_pAssemblyImport) - { - if(g_fDumpRTF) DumpRTFPrefix((void *)g_hwndAsmInfo,FALSE); - DumpAssembly((void *)g_hwndAsmInfo,FALSE); - if(g_fDumpRTF) DumpRTFPostfix((void *)g_hwndAsmInfo); - } - - if(g_uCodePage == 0xFFFFFFFF) - SendMessageW((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)GlobalBuffer); - else - { - UINT32 L = (UINT32)strlen(GlobalBuffer); - WCHAR* wz = new (nothrow) WCHAR[L+4]; - if(wz) - { - memset(wz,0,sizeof(WCHAR)*(L+2)); - int x = WszMultiByteToWideChar(CP_UTF8,0,GlobalBuffer,-1,wz,L+2); - if(g_fDumpRTF) - { - x = (int)SendMessageA((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)UnicodeToAnsi(wz)); - } - else - { - x = (int)WszSendMessage((HWND)g_hwndAsmInfo,WM_SETTEXT,0, (LPARAM)wz); - } - delete[] wz; - } - } -} - -BOOL GUIAddItemsToList() -{ - DWORD i,NumGlobals=0; - HENUMInternal hEnumMethod; - - RemoveItemsFromList(); - g_NumClassItems = 0; - g_NumNamespaces = 0; - - g_hRoot = AddOneItem( - (HTREEITEM)NULL, - g_pszModule, - (HTREEITEM)TVI_ROOT, - FIELD_IMAGE_INDEX, - g_hwndTreeView, - TRUE - ); - - if (SUCCEEDED(g_pImport->EnumGlobalFunctionsInit(&hEnumMethod))) - { - NumGlobals = g_pImport->EnumGetCount(&hEnumMethod); - g_pImport->EnumClose(&hEnumMethod); - } - if (SUCCEEDED(g_pImport->EnumGlobalFieldsInit(&hEnumMethod))) - { - NumGlobals += g_pImport->EnumGetCount(&hEnumMethod); - g_pImport->EnumClose(&hEnumMethod); - } - (*g_ClassItemList)[0].hItem = g_hRoot; - (*g_ClassItemList)[0].cl = 0; - (*g_ClassItemList)[0].SubItems = NumGlobals+1; - (*g_ClassItemList)[0].CurMember = 0; - (*g_ClassItemList)[0].pMembers = new (nothrow) TreeItem_t[NumGlobals+1]; - g_NumClassItems++; - - //AddInfoItemToClass((HTREEITEM)TVI_ROOT, &(*g_ClassItemList)[0], " M A N I F E S T", "__MANIFEST__"); - AddInfoItemToClass((HTREEITEM)TVI_ROOT, &(*g_ClassItemList)[0], " M A N I F E S T", 0xFFFFFFFF); - - if (g_NumClasses != 0) - { - //create root namespaces - { - char** rszNamespace = new (nothrow) char*[g_NumClasses]; - ULONG ulNamespaces=0; - for (i = 0; i < g_NumClasses; i++) - { - if (g_cl_enclosing[i] == mdTypeDefNil) // nested classes don't have separate namespaces - { - const char *pszClassName, *pszNameSpace; - if (FAILED(g_pImport->GetNameOfTypeDef( - g_cl_list[i], - &pszClassName, - &pszNameSpace))) - { - pszClassName = pszNameSpace = "Invalid TypeDef record"; - } - if ((pszNameSpace != NULL) && (*pszNameSpace != 0)) - { - rszNamespace[ulNamespaces++] = (char*)pszNameSpace; - } - } - } - if (ulNamespaces != 0) - { - qsort(&rszNamespace[0],ulNamespaces,sizeof(char*),stringCmp); - for(i = 0; i < ulNamespaces; i++) FindCreateNamespaceRoot(rszNamespace[i]); - } - delete[] rszNamespace; - } - AddClassesWithEncloser(mdTypeDefNil,NULL); - }// end if (g_NumClasses) - AddGlobalFunctions(); - - WszSendMessage(g_hwndTreeView, TVM_EXPAND, TVE_EXPAND, (LPARAM)g_hRoot); - EnableMenuItem(g_hMenu,(UINT)(UINT_PTR)g_hViewMenu, MF_ENABLED); - EnableMenuItem(g_hFileMenu,IDM_DUMP,MF_ENABLED); - EnableMenuItem(g_hFileMenu,IDM_DUMP_TREE,MF_ENABLED); - DrawMenuBar(g_hwndMain); - - { - WszMultiByteToWideChar(CP_UTF8,0,g_szInputFile,-1,wzUniBuf,2048); - wcscat_s(wzUniBuf,2048,L" - IL DASM"); - for(int cnt=0; cnt<100; cnt++) - { - SendMessageW(g_hwndMain,WM_SETTEXT, 0, (LPARAM)wzUniBuf); - SendMessageW(g_hwndMain,WM_GETTEXT, 2048, (LPARAM)&wzUniBuf[2048]); - wzUniBuf[2047]=0; - if(0 == wcscmp(wzUniBuf,&wzUniBuf[2048])) break; - } - } - - if (IsGuiILOnly()) { - ShowWindow(g_hwndMain, SW_HIDE); - } else { - ShowWindow(g_hwndMain, SW_SHOW); - } - UpdateWindow(g_hwndMain); - //GUIDisassemble(0,0,"MANIFEST"); - g_Mode &= ~MODE_GUI; - DumpManifest(NULL); - g_Mode |= MODE_GUI; - - GUIDumpAssemblyInfo(); - - TreeView_SelectItem(g_hwndTreeView,g_hRoot); - SetFocus(g_hwndTreeView); - return TRUE; -} - - -// -// Find class item by class token -// -ClassItem_t* ClassItemByToken(mdTypeDef cl) -{ - for(ULONG i=0; i < g_NumClassItems; i++) - { - if((*g_ClassItemList)[i].cl == cl) return &(*g_ClassItemList)[i]; - } - return NULL; -} - -// Factored out of AddClassToTreeView for its big stack consumption (AddClassToTreeView is -// called recursively via AddClassesWithEncloser). -static void AddClassToTreeView_PrettyPrintClass(mdTypeRef crType, LPCUTF8 pszFormat, __out_ecount(cBufferSize) char *pszBuffer, size_t cBufferSize) -{ - CQuickBytes out; - sprintf_s(pszBuffer, cBufferSize, pszFormat, PrettyPrintClass(&out, crType, g_pImport)); -} - -// -// Add a class and its members -// -#ifdef _PREFAST_ -#pragma warning(push) -#pragma warning(disable:21000) // Suppress PREFast warning about overly large function -#endif -HTREEITEM AddClassToTreeView(HTREEITEM hParent, mdTypeDef cl) -{ - HRESULT hr; - ClassItem_t *pClassItem; - HTREEITEM hClassRoot; - HTREEITEM hNamespaceRoot = hParent; - HTREEITEM hPrimaryInfo; - HTREEITEM hLast; - mdToken *pMemberList = NULL; - HENUMInternal hEnumMethod; // enumerator for method defs - HENUMInternal hEnumField; // enumerator for fields - HENUMInternal hEnumEvent; // enumerator for events - HENUMInternal hEnumProp; // enumerator for properties - DWORD NumMembers; - const char *pszClassName; // name associated with this CL - const char *pszNamespace; - DWORD dwClassAttrs; - mdTypeRef crExtends; - mdInterfaceImpl ii; - DWORD NumInterfaces; - DWORD i; - char *szPrimaryInfo; // public class foo extends bar -// char *szFullClassName; - DWORD SubItems; - const char *pszSuperName = NULL; - HENUMInternal hEnumII; // enumerator for interface impl - mdCustomAttribute *rCA; - ULONG ulCAs; - UINT uImageIndex = CLASS_IMAGE_INDEX; - BOOL bIsEnum = FALSE; - BOOL bIsValueType = FALSE; - BOOL bExtendsSysObject=FALSE; - - if (FAILED(g_pImport->GetNameOfTypeDef( - cl, - &pszClassName, - &pszNamespace))) - { - return FALSE; - } - MAKE_NAME_IF_NONE(pszClassName,cl); - g_pImport->GetTypeDefProps( - cl, - &dwClassAttrs, - &crExtends - ); - if(g_fLimitedVisibility) - { - if(g_fHidePub && (IsTdPublic(dwClassAttrs)||IsTdNestedPublic(dwClassAttrs))) return NULL; - if(g_fHidePriv && (IsTdNotPublic(dwClassAttrs)||IsTdNestedPrivate(dwClassAttrs))) return NULL; - if(g_fHideFam && IsTdNestedFamily(dwClassAttrs)) return NULL; - if(g_fHideAsm && IsTdNestedAssembly(dwClassAttrs)) return NULL; - if(g_fHideFOA && IsTdNestedFamORAssem(dwClassAttrs)) return NULL; - if(g_fHideFAA && IsTdNestedFamANDAssem(dwClassAttrs)) return NULL; - } - hr = g_pImport->EnumInit( - mdtInterfaceImpl, - cl, - &hEnumII); - if (FAILED(hr)) - return FALSE; - - NumInterfaces = g_pImport->EnumGetCount(&hEnumII); - hr = g_pImport->EnumInit(mdtMethodDef, cl, &hEnumMethod); - if (FAILED(hr)) - { - printf("Unable to enum methods\n"); - return FALSE; - } - NumMembers = g_pImport->EnumGetCount(&hEnumMethod); - - hr = g_pImport->EnumInit(mdtFieldDef, cl, &hEnumField); - if (FAILED(hr)) - { - g_pImport->EnumClose(&hEnumMethod); - printf("Unable to enum fields\n"); - return FALSE; - } - NumMembers += g_pImport->EnumGetCount(&hEnumField); - - hr = g_pImport->EnumInit(mdtEvent, cl, &hEnumEvent); - if (FAILED(hr)) - { - g_pImport->EnumClose(&hEnumMethod); - g_pImport->EnumClose(&hEnumField); - printf("Unable to enum events\n"); - return FALSE; - } - NumMembers += g_pImport->EnumGetCount(&hEnumEvent); - - hr = g_pImport->EnumInit(mdtProperty, cl, &hEnumProp); - if (FAILED(hr)) - { - g_pImport->EnumClose(&hEnumMethod); - g_pImport->EnumClose(&hEnumField); - g_pImport->EnumClose(&hEnumEvent); - printf("Unable to enum properties\n"); - return FALSE; - } - NumMembers += g_pImport->EnumGetCount(&hEnumProp); - if (NumMembers > 0) - { - pMemberList = new (nothrow) mdToken[NumMembers]; - if (pMemberList == NULL) - { - // close enum before return - g_pImport->EnumClose(&hEnumMethod); - g_pImport->EnumClose(&hEnumField); - g_pImport->EnumClose(&hEnumEvent); - g_pImport->EnumClose(&hEnumProp); - return FALSE; - } - - for (i = 0; g_pImport->EnumNext(&hEnumField, &pMemberList[i]); i++); - for (; g_pImport->EnumNext(&hEnumMethod, &pMemberList[i]); i++); - for (; g_pImport->EnumNext(&hEnumEvent, &pMemberList[i]); i++); - for (; g_pImport->EnumNext(&hEnumProp, &pMemberList[i]); i++); - _ASSERTE(i == NumMembers); - - } - else - { - pMemberList = NULL; - } - - // Add class root to treeview - SubItems = NumMembers + NumInterfaces + 3; - if (!IsNilToken(crExtends)) - { - LPCSTR szClassName=""; - LPCSTR szNameSpace=""; - SubItems++; - if(TypeFromToken(crExtends)==mdtTypeRef) - { - if (FAILED(g_pImport->GetNameOfTypeRef(crExtends, &szNameSpace, &szClassName))) - { - return FALSE; - } - if(!(strcmp(szNameSpace,"System") || strcmp(szClassName, "Object"))) - { - SubItems--; - bExtendsSysObject = TRUE; - } - } - else if (TypeFromToken(crExtends) == mdtTypeDef) - { - if (FAILED(g_pImport->GetNameOfTypeDef(crExtends, &szClassName, &szNameSpace))) - { - return FALSE; - } - } - - bIsEnum = (!strcmp(szNameSpace,"System"))&&(!strcmp(szClassName,"Enum")); - - bIsValueType = (!strcmp(szNameSpace,"System"))&&(!strcmp(szClassName,"ValueType")) - && (strcmp(pszNamespace,"System") || strcmp(pszClassName,"Enum")); - } - { - HCORENUM hEnum = NULL; - rCA = new (nothrow) mdCustomAttribute[4096]; - g_pPubImport->EnumCustomAttributes(&hEnum, cl, 0, rCA, 4096, &ulCAs); - SubItems += ulCAs; - g_pPubImport->CloseEnum( hEnum); - } - for (i = 0; i < g_NumClasses; i++) - { - if(g_cl_enclosing[i] == cl) SubItems++; - } - - if(IsTdInterface(dwClassAttrs)) uImageIndex = CLASSINT_IMAGE_INDEX; - if(bIsValueType) uImageIndex = CLASSVAL_IMAGE_INDEX; - if(bIsEnum) uImageIndex = CLASSENUM_IMAGE_INDEX; - char *szptr1; - if((*pszNamespace != 0) && g_fTreeViewFCN) - sprintf_s(szString,SZSTRING_SIZE,"%s.",pszNamespace); - else - szString[0] = 0; - strcat_s(szString,SZSTRING_SIZE,pszClassName); - szptr1 = &szString[strlen(szString)]; - // Count the type parameters -- could be too many for GUI - DWORD NumTyPars; - mdGenericParam tkTyPar; - HCORENUM hEnumTyPar = NULL; - unsigned jj; - - for(jj=0; - SUCCEEDED(g_pPubImport->EnumGenericParams(&hEnumTyPar, cl, &tkTyPar, 1, &NumTyPars)) - && (NumTyPars != 0); jj++); - - if (jj > 0) - { - if(jj > 16) - szptr1 += sprintf_s(szptr1,SZSTRING_REMAINING_SIZE(szptr1),"%s%d type parameters%s",LTN(),jj,GTN()); - else - DumpGenericPars(szString,cl); - - uImageIndex = CLASS_GEN_IMAGE_INDEX; - if(IsTdInterface(dwClassAttrs)) uImageIndex = CLASSINT_GEN_IMAGE_INDEX; - if(bIsValueType) uImageIndex = CLASSVAL_GEN_IMAGE_INDEX; - if(bIsEnum) uImageIndex = CLASSENUM_GEN_IMAGE_INDEX; - } - - pClassItem = AddClassToGUI(cl, uImageIndex, pszNamespace, szString, SubItems, &hNamespaceRoot); - if (pClassItem == NULL) - return FALSE; - - hClassRoot = pClassItem->hItem; - - const size_t BUFFER_SIZE = 8192; - szPrimaryInfo = new (nothrow) char[BUFFER_SIZE]; - strcpy_s(szPrimaryInfo, BUFFER_SIZE,".class "); - - if (IsTdInterface(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "interface "); - //else if (IsTdUnmanagedValueType(dwClassAttrs)) strcat(szPrimaryInfo, "not_in_gc_heap value "); - else if (bIsValueType) strcat_s(szPrimaryInfo, BUFFER_SIZE, "value "); - else if (bIsEnum) strcat_s(szPrimaryInfo, BUFFER_SIZE, "enum "); - - if (IsTdPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "public "); - if (IsTdNotPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "private "); - if (IsTdNestedPublic(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested public "); - if (IsTdNestedPrivate(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested private "); - if (IsTdNestedFamily(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested family "); - if (IsTdNestedAssembly(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested assembly "); - if (IsTdNestedFamANDAssem(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested famandassem "); - if (IsTdNestedFamORAssem(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "nested famorassem "); - if (IsTdAbstract(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "abstract "); - if (IsTdAutoLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "auto "); - if (IsTdSequentialLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "sequential "); - if (IsTdExplicitLayout(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "explicit "); - if (IsTdAnsiClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "ansi "); - if (IsTdUnicodeClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "unicode "); - if (IsTdAutoClass(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "autochar "); - if (IsTdImport(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "import "); - if (IsTdWindowsRuntime(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "windowsruntime "); - if (IsTdSerializable(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "serializable "); -// if (IsTdEnum(dwClassAttrs)) strcat(szPrimaryInfo, "enum "); - if (IsTdSealed(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "sealed "); - if (IsTdBeforeFieldInit(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "beforefieldinit "); - if (IsTdSpecialName(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "specialname "); - if (IsTdRTSpecialName(dwClassAttrs)) strcat_s(szPrimaryInfo, BUFFER_SIZE, "rtspecialname "); - - if(g_fDumpTokens) sprintf_s(&szPrimaryInfo[strlen(szPrimaryInfo)], BUFFER_SIZE - strlen(szPrimaryInfo)," /*%08X*/",cl); - hPrimaryInfo = AddInfoItemToClass(hClassRoot, pClassItem, szPrimaryInfo, NULL); - hLast = hPrimaryInfo; - // Now add nodes for extends, implements - if (!IsNilToken(crExtends)) - { - if (!bExtendsSysObject) - { - AddClassToTreeView_PrettyPrintClass(crExtends, " extends %s ", szPrimaryInfo, BUFFER_SIZE); - hLast = AddInfoItemToClass(hLast, pClassItem, szPrimaryInfo, crExtends); - } - } - - if (NumInterfaces > 0) - { - for (i=0; g_pImport->EnumNext(&hEnumII, &ii); i++) - { - mdTypeRef crInterface; - - if (FAILED(g_pImport->GetTypeOfInterfaceImpl(ii, &crInterface))) - { - printf("Unable to get information about interface implementation\n"); - return FALSE; - } - { - AddClassToTreeView_PrettyPrintClass(crInterface, " implements %s ", szPrimaryInfo, BUFFER_SIZE); - hLast = AddInfoItemToClass(hLast, pClassItem, szPrimaryInfo, crInterface); - } - } - - // The assertion will fire if the enumerator is bad - _ASSERTE(NumInterfaces == i); - - // close the enumerator - g_pImport->EnumClose(&hEnumII); - } - delete[] szPrimaryInfo; - - BOOL fDumpRTF = g_fDumpRTF; - g_fDumpRTF = FALSE; - // add info entries for custom attributes - for(i = 0; i < ulCAs; i++) - { - char* pc; - memset(GlobalBuffer,0,GlobalBufferLen); - InGlobalBuffer = 0; - DumpCustomAttribute(rCA[i],(void *)g_hwndTreeView,false); - if(pc = strchr(GlobalBuffer,'\r')) strcpy_s(pc,6," ..."); // until the first <CR> only - //hLast = AddInfoItemToClass(hLast, pClassItem, GlobalBuffer, "#####"); // this "name" is guaranteed to be unique! - hLast = AddInfoItemToClass(hLast, pClassItem, GlobalBuffer, rCA[i]); - } - delete[] rCA; - - // Re-fetch the current class item ptr, dynamic array may have shifted - pClassItem = ClassItemByToken(cl); - - // Add nested classes - AddClassesWithEncloser(cl,pClassItem->hItem); - pClassItem = ClassItemByToken(cl); - - MemberInfo* members = NULL; - if (NumMembers != 0) - { - members = new (nothrow) MemberInfo[NumMembers]; - if (members == NULL) - { - if (pMemberList != NULL) delete[] pMemberList; - return FALSE; - } - } - // do in four passes, fields first - MemberInfo* curMem = members; - for (i = 0; i < NumMembers; i++) - { - if (TypeFromToken(pMemberList[i]) == mdtFieldDef) - { - curMem->token = pMemberList[i]; - if (FAILED(g_pImport->GetFieldDefProps(pMemberList[i], &curMem->dwAttrs))) - { - printf("Invalid FieldDef %08X record\n", pMemberList[i]); - delete []members; - delete []pMemberList; - return FALSE; - } - if (FAILED(g_pImport->GetNameOfFieldDef(pMemberList[i], &curMem->pszMemberName))) - { - printf("Invalid FieldDef %08X record\n", pMemberList[i]); - delete []members; - delete []pMemberList; - return FALSE; - } - MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]); - if (FAILED(g_pImport->GetSigOfFieldDef(pMemberList[i], &curMem->cComSig, &curMem->pComSig))) - { - printf("Invalid FieldDef %08X record\n", pMemberList[i]); - delete []members; - delete []pMemberList; - return FALSE; - } - curMem++; - } - else break; - } - - MemberInfo* endMem = curMem; - if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp); - - for (curMem = members; curMem < endMem;curMem++) - { - if (g_fLimitedVisibility) - { - if(g_fHidePub && IsFdPublic(curMem->dwAttrs)) continue; - if(g_fHidePriv && IsFdPrivate(curMem->dwAttrs)) continue; - if(g_fHideFam && IsFdFamily(curMem->dwAttrs)) continue; - if(g_fHideAsm && IsFdAssembly(curMem->dwAttrs)) continue; - if(g_fHideFOA && IsFdFamORAssem(curMem->dwAttrs)) continue; - if(g_fHideFAA && IsFdFamANDAssem(curMem->dwAttrs)) continue; - if(g_fHidePrivScope && IsFdPrivateScope(curMem->dwAttrs)) continue; - } - AddFieldToGUI(cl, pClassItem, pszNamespace, pszClassName, curMem->pszMemberName, NULL, curMem->token, curMem->dwAttrs); - } - - // methods second - curMem = members; - for (; i < NumMembers; i++) - { - if (TypeFromToken(pMemberList[i]) == mdtMethodDef) - { - curMem->token = pMemberList[i]; - if (FAILED(g_pImport->GetMethodDefProps(pMemberList[i], &curMem->dwAttrs))) - { - printf("Invalid MethodDef %08X record\n", pMemberList[i]); - delete []members; - delete []pMemberList; - return FALSE; - } - - if (FAILED(g_pImport->GetNameOfMethodDef(pMemberList[i], &curMem->pszMemberName))) - { - printf("Invalid MethodDef %08X record\n", pMemberList[i]); - delete []members; - delete []pMemberList; - return FALSE; - } - MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]); - if (FAILED(g_pImport->GetSigOfMethodDef(pMemberList[i], &curMem->cComSig, &curMem->pComSig))) - { - printf("Invalid MethodDef %08X record\n", pMemberList[i]); - delete []members; - delete []pMemberList; - return FALSE; - } - curMem++; - } - else break; - } - - endMem = curMem; - if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp); - - for (curMem = members; curMem < endMem;curMem++) - { - if (g_fLimitedVisibility) - { - if(g_fHidePub && IsMdPublic(curMem->dwAttrs)) continue; - if(g_fHidePriv && IsMdPrivate(curMem->dwAttrs)) continue; - if(g_fHideFam && IsMdFamily(curMem->dwAttrs)) continue; - if(g_fHideAsm && IsMdAssem(curMem->dwAttrs)) continue; - if(g_fHideAsm && g_fHideFam && IsMdFamORAssem(curMem->dwAttrs)) continue; - if(g_fHideFAA && IsMdFamANDAssem(curMem->dwAttrs)) continue; - if(g_fHidePrivScope && IsMdPrivateScope(curMem->dwAttrs)) continue; - } - AddMethodToGUI(cl, pClassItem, pszNamespace, pszClassName, curMem->pszMemberName, curMem->pComSig, curMem->cComSig, curMem->token, curMem->dwAttrs); - } - // events third - curMem = members; - for (; i < NumMembers; i++) - { - if (TypeFromToken(pMemberList[i]) == mdtEvent) - { - curMem->token = pMemberList[i]; - if (FAILED(g_pImport->GetEventProps( - curMem->token, - &curMem->pszMemberName, - &curMem->dwAttrs, - (mdToken *)&curMem->pComSig))) - { - curMem->pszMemberName = "Invalid Event record"; - curMem->dwAttrs = 0; - curMem->pComSig = (PCCOR_SIGNATURE)mdTypeDefNil; - } - MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]); - curMem++; - } - else break; - } - - endMem = curMem; - if (g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp); - curMem = members; - while (curMem < endMem) - { - if (g_fLimitedVisibility) - { - HENUMInternal hAssoc; - unsigned nAssoc; - if (FAILED(g_pImport->EnumAssociateInit(curMem->token,&hAssoc))) - { - continue; - } - if (nAssoc = hAssoc.m_ulCount) - { - NewArrayHolder<ASSOCIATE_RECORD> rAssoc = new (nothrow) ASSOCIATE_RECORD[nAssoc]; - if (FAILED(g_pImport->GetAllAssociates(&hAssoc,rAssoc,nAssoc))) - { - continue; - } - - for (unsigned i=0; i < nAssoc;i++) - { - if (TypeFromToken(rAssoc[i].m_memberdef) == mdtMethodDef) - { - DWORD dwAttrs; - if (FAILED(g_pImport->GetMethodDefProps(rAssoc[i].m_memberdef, &dwAttrs))) - { - continue; - } - if(g_fHidePub && IsMdPublic(dwAttrs)) continue; - if(g_fHidePriv && IsMdPrivate(dwAttrs)) continue; - if(g_fHideFam && IsMdFamily(dwAttrs)) continue; - if(g_fHideAsm && IsMdAssem(dwAttrs)) continue; - if(g_fHideFOA && IsMdFamORAssem(dwAttrs)) continue; - if(g_fHideFAA && IsMdFamANDAssem(dwAttrs)) continue; - if(g_fHidePrivScope && IsMdPrivateScope(dwAttrs)) continue; - } - AddEventToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token); - break; - } - } - g_pImport->EnumClose(&hAssoc); - } - else AddEventToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token); - curMem++; - } - // properties fourth - curMem = members; - for (; i < NumMembers; i++) - { - if (TypeFromToken(pMemberList[i]) == mdtProperty) - { - curMem->token = pMemberList[i]; - if (FAILED(g_pImport->GetPropertyProps( - curMem->token, - &curMem->pszMemberName, - &curMem->dwAttrs, - &curMem->pComSig, - &curMem->cComSig))) - { - curMem->pszMemberName = "Invalid Property record"; - curMem->dwAttrs = 0; - curMem->pComSig = NULL; - curMem->cComSig = 0; - } - MAKE_NAME_IF_NONE(curMem->pszMemberName,pMemberList[i]); - curMem++; - } - } - - endMem = curMem; - if(g_fSortByName) qsort(members, endMem - members, sizeof MemberInfo, memberCmp); - curMem = members; - while(curMem < endMem) - { - if (g_fLimitedVisibility) - { - HENUMInternal hAssoc; - unsigned nAssoc; - if (FAILED(g_pImport->EnumAssociateInit(curMem->token,&hAssoc))) - { - continue; - } - if (nAssoc = hAssoc.m_ulCount) - { - NewArrayHolder<ASSOCIATE_RECORD> rAssoc = new (nothrow) ASSOCIATE_RECORD[nAssoc]; - if (FAILED(g_pImport->GetAllAssociates(&hAssoc,rAssoc,nAssoc))) - { - continue; - } - - for (unsigned i=0; i < nAssoc;i++) - { - if (TypeFromToken(rAssoc[i].m_memberdef) == mdtMethodDef) - { - DWORD dwAttrs; - if (FAILED(g_pImport->GetMethodDefProps(rAssoc[i].m_memberdef, &dwAttrs))) - { - continue; - } - if(g_fHidePub && IsMdPublic(dwAttrs)) continue; - if(g_fHidePriv && IsMdPrivate(dwAttrs)) continue; - if(g_fHideFam && IsMdFamily(dwAttrs)) continue; - if(g_fHideAsm && IsMdAssem(dwAttrs)) continue; - if(g_fHideFOA && IsMdFamORAssem(dwAttrs)) continue; - if(g_fHideFAA && IsMdFamANDAssem(dwAttrs)) continue; - if(g_fHidePrivScope && IsMdPrivateScope(dwAttrs)) continue; - } - AddPropToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token); - break; - } - } - g_pImport->EnumClose(&hAssoc); - } - else AddPropToGUI(cl, pClassItem, pszNamespace, pszClassName, dwClassAttrs, curMem->token); - curMem++; - } - g_fDumpRTF = fDumpRTF; - if(pMemberList) delete[] pMemberList; - if(members) delete[] members; -#ifdef _PREFAST_ -#pragma warning(pop) -#endif - return hClassRoot; -} -#ifdef _PREFAST_ -#pragma warning(pop) -#endif - -void CreateMenus() -{ - HMENU hMenuPopup; - - g_hMenu = CreateMenu(); - - hMenuPopup = CreateMenu(); - WszAppendMenu(hMenuPopup, MF_STRING, IDM_OPEN, RstrW(IDS_OPEN)); - WszAppendMenu(hMenuPopup, MF_STRING|MF_GRAYED, IDM_DUMP, RstrW(IDS_DUMP)); - WszAppendMenu(hMenuPopup, MF_STRING|MF_GRAYED, IDM_DUMP_TREE, RstrW(IDS_DUMPTREE)); - WszAppendMenu(hMenuPopup, MF_STRING, IDM_EXIT, RstrW(IDS_EXIT)); - WszAppendMenu(g_hMenu, MF_POPUP, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_FILE)); - g_hFileMenu = hMenuPopup; - - hMenuPopup = CreateMenu(); - g_hFontMenu = CreateMenu(); - WszAppendMenu(hMenuPopup,MF_POPUP,(UINT)(UINT_PTR)g_hFontMenu,RstrW(IDS_FONTS)); - WszAppendMenu(g_hFontMenu,MF_STRING,IDM_FONT_TREE,RstrW(IDS_FONT_TREE)); - WszAppendMenu(g_hFontMenu,MF_STRING,IDM_FONT_DASM,RstrW(IDS_FONT_DASM)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fSortByName ? MF_CHECKED : MF_UNCHECKED), IDM_SORT_BY_NAME, RstrW(IDS_SORT_BY_NAME)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fTreeViewFCN ? MF_CHECKED : MF_UNCHECKED), IDM_TREEVIEWFCN, RstrW(IDS_TREEVIEWFCN)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fCAVerbal ? MF_CHECKED : MF_UNCHECKED), IDM_CAVERBAL, RstrW(IDS_CAVERBAL)); - //WszAppendMenu(hMenuPopup, MF_STRING|(g_fDumpRTF ? MF_CHECKED : MF_UNCHECKED), IDM_DUMPRTF, RstrW(IDS_DUMPRTF)); - // MF_SEPARATOR ==> last 2 params ignored - WszAppendMenu(hMenuPopup, MF_SEPARATOR,0,NULL); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePub ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PUB, RstrW(IDS_SHOW_PUB)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePriv ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PRIV, RstrW(IDS_SHOW_PRIV)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFam ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FAM, RstrW(IDS_SHOW_FAM)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideAsm ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_ASM, RstrW(IDS_SHOW_ASM)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFAA ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FAA, RstrW(IDS_SHOW_FAA)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHideFOA ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_FOA, RstrW(IDS_SHOW_FOA)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fHidePrivScope ? MF_CHECKED : MF_UNCHECKED), IDM_SHOW_PSCOPE, RstrW(IDS_SHOW_PSCOPE)); - WszAppendMenu(hMenuPopup, MF_SEPARATOR,0,NULL); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fFullMemberInfo ? MF_CHECKED : MF_UNCHECKED), IDM_FULL_INFO, RstrW(IDS_FULL_INFO)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fShowBytes ? MF_CHECKED : MF_UNCHECKED), IDM_BYTES, RstrW(IDS_BYTES)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fDumpTokens ? MF_CHECKED : MF_UNCHECKED), IDM_TOKENS, RstrW(IDS_TOKENS)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fShowSource ? MF_CHECKED : MF_UNCHECKED), IDM_SOURCELINES, RstrW(IDS_SOURCELINES)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fQuoteAllNames ? MF_CHECKED : MF_UNCHECKED), IDM_QUOTEALLNAMES, RstrW(IDS_QUOTEALLNAMES)); - WszAppendMenu(hMenuPopup, MF_STRING|(g_fTryInCode ? MF_CHECKED : MF_UNCHECKED), IDM_EXPANDTRY, RstrW(IDS_EXPANDTRY)); - if(g_fTDC) - { - - WszAppendMenu(hMenuPopup, MF_STRING, IDM_SHOW_HEADER, RstrW(IDS_SHOW_HEADER)); - WszAppendMenu(hMenuPopup, MF_STRING, IDM_SHOW_STAT, RstrW(IDS_SHOW_STAT)); - g_hMetaInfoMenu = CreateMenu(); - //MENUINFO mi; - //GetMenuInfo(g_hMetaInfoMenu,&mi); - //mi.dwStyle |= MNS_MODELESS; - //SetMenuInfo(g_hMetaInfoMenu,&mi); - WszAppendMenu(hMenuPopup, MF_POPUP, (UINT)(UINT_PTR)g_hMetaInfoMenu, RstrW(IDS_METAINFO)); - - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEX,RstrW(IDS_MI_HEX)); - WszAppendMenu(g_hMetaInfoMenu,MF_SEPARATOR,0,NULL); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpCSV ? MF_CHECKED : MF_UNCHECKED),IDM_MI_CSV,RstrW(IDS_MI_CSV)); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpHeader ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEADER,RstrW(IDS_MI_HEADER)); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpSchema ? MF_CHECKED : MF_UNCHECKED),IDM_MI_SCHEMA,RstrW(IDS_MI_SCHEMA)); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpRaw ? MF_CHECKED : MF_UNCHECKED),IDM_MI_RAW,RstrW(IDS_MI_RAW)); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? MF_CHECKED : MF_UNCHECKED),IDM_MI_HEAPS,RstrW(IDS_MI_HEAPS)); - WszAppendMenu(g_hMetaInfoMenu,MF_SEPARATOR,0,NULL); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpUnsat ? MF_CHECKED : MF_UNCHECKED),IDM_MI_UNREX,RstrW(IDS_MI_UNREX)); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING|(g_ulMetaInfoFilter & MDInfo::dumpValidate ? MF_CHECKED : MF_UNCHECKED),IDM_MI_VALIDATE,RstrW(IDS_MI_VALIDATE)); - WszAppendMenu(g_hMetaInfoMenu,MF_STRING,IDM_SHOW_METAINFO,RstrW(IDS_SHOW_METAINFO)); - } - WszAppendMenu(g_hMenu, MF_POPUP|MF_GRAYED, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_VIEW)); - g_hViewMenu = hMenuPopup; - hMenuPopup = CreateMenu(); - WszAppendMenu(hMenuPopup, MF_STRING, IDM_HELP,RstrW(IDS_HELP)); - WszAppendMenu(hMenuPopup, MF_STRING, IDM_ABOUT,RstrW(IDS_ABOUT)); - WszAppendMenu(g_hMenu, MF_POPUP, (UINT)(UINT_PTR)hMenuPopup, RstrW(IDS_HELP)); -} - -BOOL LoadImages() -{ - int i; - - g_hImageList = ImageList_Create(BITMAP_WIDTH, BITMAP_HEIGHT, ILC_COLOR8, LAST_IMAGE_INDEX, 1); - if (g_hImageList == NULL) - return FALSE; - - _ASSERTE(g_hResources != NULL); - for (i = 0; i < LAST_IMAGE_INDEX; i++) - { - g_hBitmaps[i] = (HBITMAP) WszLoadImage( - g_hResources, - MAKEINTRESOURCE(i + IDB_CLASS), - IMAGE_BITMAP, - 15, - 15, - LR_LOADTRANSPARENT //LR_DEFAULTCOLOR - ); - if (g_hBitmaps[i] == NULL) - return FALSE; - int index = ImageList_Add(g_hImageList, g_hBitmaps[i], NULL); - if (index != i) - return FALSE; - } - - return TRUE; -} -// Local functions for font persistence: -char* FontSaveFileName() -{ - static char szFileName[MAX_PATH]; - static BOOL bInit = TRUE; - if(bInit) - { - (void)GetWindowsDirectoryA(szFileName,MAX_PATH); - if(szFileName[strlen(szFileName)-1]!='\\') strcat_s(szFileName,MAX_PATH,"\\"); - strcat_s(szFileName,MAX_PATH,"ildasmfnt.bin"); - bInit = FALSE; - } - return szFileName; -} -BOOL LoadGUIFonts(GUI_Info* pguiInfo) -{ - FILE* pF = NULL; - BOOL ret = FALSE; - int dummy; - if(fopen_s(&pF,FontSaveFileName(),"rb")==0) - { - ret = (fread(pguiInfo->plfDasm,sizeof(LOGFONTW),1,pF) && fread(pguiInfo->plfTree,sizeof(LOGFONTW),1,pF)); - if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->x = dummy; - if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->y = dummy; - if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->w = dummy; - if(fread(&dummy,sizeof(int),1,pF)) pguiInfo->h = dummy; - if(fread(&dummy,sizeof(int),1,pF)) g_fTreeViewFCN = (dummy != 0); - if(fread(&dummy,sizeof(int),1,pF)) g_fSortByName = (dummy != 0); - if(fread(&dummy,sizeof(int),1,pF)) g_fFullMemberInfo = (dummy != 0); - - fclose(pF); - } - return ret; -} -BOOL SaveGUIFonts(GUI_Info* pguiInfo) -{ - FILE* pF=NULL; - BOOL ret = FALSE; - int dummyFCN = (g_fTreeViewFCN ? 1:0); - int dummySBN = (g_fSortByName ? 1:0); - int dummyFMI = (g_fFullMemberInfo ? 1:0); - if(fopen_s(&pF,FontSaveFileName(),"wb")==0) - { - ret = (fwrite(pguiInfo->plfDasm,sizeof(LOGFONTW),1,pF) - && fwrite(pguiInfo->plfTree,sizeof(LOGFONTW),1,pF) - && fwrite(&(pguiInfo->x),sizeof(int),1,pF) - && fwrite(&(pguiInfo->y),sizeof(int),1,pF) - && fwrite(&(pguiInfo->w),sizeof(int),1,pF) - && fwrite(&(pguiInfo->h),sizeof(int),1,pF) - && fwrite(&dummyFCN,sizeof(int),1,pF) - && fwrite(&dummySBN,sizeof(int),1,pF) - && fwrite(&dummyFMI,sizeof(int),1,pF) - ); - fclose(pF); - } - return ret; -} -// Init various GUI variables, get handles -// if InitGUI returns FALSE, ildasm exits -#define DEFAULT_FONTS -BOOL InitGUI() -{ - INITCOMMONCONTROLSEX InitInfo; -#ifdef DEFAULT_FONTS - LOGFONTW strDefaultLogFontDasm = {-14,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET, - OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FIXED_PITCH | FF_MODERN,L"Fixedsys"}; - LOGFONTW strDefaultLogFontTree = {-11,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET, - OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,VARIABLE_PITCH | FF_SWISS,L"Tahoma"}; - LOGFONTA strDefaultLogFontDasmA = {-14,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET, - OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FIXED_PITCH | FF_MODERN,"Fixedsys"}; - LOGFONTA strDefaultLogFontTreeA = {-11,0,0,0,FW_REGULAR,0,0,0,ANSI_CHARSET, - OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,VARIABLE_PITCH | FF_SWISS,"Tahoma"}; -#endif - g_DisasmBox = new DynamicArray<DisasmBox_t>; - g_ClassItemList = new DynamicArray<ClassItem_t>; - g_NamespaceList = new DynamicArray<Namespace_t>; - WszLoadLibrary(L"riched20.dll"); - - InitInfo.dwSize = sizeof(InitInfo); - InitInfo.dwICC = ICC_LISTVIEW_CLASSES; - - if (InitCommonControlsEx(&InitInfo) == FALSE) - return FALSE; - - g_hInstance = WszGetModuleHandle(NULL); - g_hResources = LoadLocalizedResourceDLLForSDK(L"ildasmrc.dll"); - - //--------- get logical fonts -#ifdef DEFAULT_FONTS - if(!LoadGUIFonts(&guiInfo)) - { - memcpy(&g_strLogFontDasm,&strDefaultLogFontDasm,sizeof(LOGFONTW)); - memcpy(&g_strLogFontTree,&strDefaultLogFontTree,sizeof(LOGFONTW)); - } - if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; } - // -------- create font for disassembly window - g_hFixedFont = CreateFontIndirectW(&g_strLogFontDasm); - // -------- create font for tree view - g_hSmallFont = CreateFontIndirectW(&g_strLogFontTree); -#else - if(LoadGUIFonts(&guiInfo)) - { - if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; } - // -------- create font for disassembly window - g_hFixedFont = CreateFontIndirect(&g_strLogFontDasm); - // -------- create font for tree view - g_hSmallFont = CreateFontIndirect(&g_strLogFontTree); - } - else - { - g_hFixedFont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT); - g_hSmallFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); - } -#endif - if (g_hFixedFont == NULL) return FALSE; - if (g_hSmallFont == NULL) return FALSE; - - memset(&g_strChFontDasm,0,sizeof(CHOOSEFONT)); - g_strChFontDasm.lStructSize = sizeof(CHOOSEFONT); - g_strChFontDasm.lpLogFont = &g_strLogFontDasm; - g_strChFontDasm.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_SHOWHELP; - if(!g_fDumpRTF) g_strChFontDasm.Flags |= CF_EFFECTS; // no color change option for RTF output! - g_strChFontDasm.rgbColors = GetSysColor(COLOR_INFOTEXT); - - memset(&g_strChFontTree,0,sizeof(CHOOSEFONTW)); - g_strChFontTree.lStructSize = sizeof(CHOOSEFONTW); - g_strChFontTree.lpLogFont = &g_strLogFontTree; - g_strChFontTree.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS |CF_SHOWHELP /*| CF_EFFECTS*/; - g_strChFontTree.rgbColors = GetSysColor(COLOR_WINDOWTEXT); - - g_hWhiteBrush = (HBRUSH) GetStockObject(WHITE_BRUSH); - if (g_hWhiteBrush == NULL) - return FALSE; - - if (LoadImages() == FALSE) - return FALSE; - - if (RegisterWindowClasses() == FALSE) - return FALSE; -#undef RegisterWindowMessageW - g_uFindReplaceMsg = RegisterWindowMessageW(FINDMSGSTRING); - - CreateMenus(); - - return TRUE; -} - -void DestroyGUI() -{ - SDELETE(g_DisasmBox); - SDELETE(g_ClassItemList); - SDELETE(g_NamespaceList); -} -// -// Set the font of a particular window to the global fixed size font -// -void SetWindowFontFixed(HWND hwnd) -{ - WszSendMessage( - hwnd, - WM_SETFONT, - (LPARAM) g_hFixedFont, - FALSE - ); -} - - -// -// Set the char dimensions variables -// -void SetCharDimensions(HWND hwnd) -{ - if (InterlockedIncrement(&g_SetCharDimensions) == 1) - { - HDC hdc; - TEXTMETRIC tm; - - hdc = GetDC(hwnd); - - GetTextMetrics(hdc, &tm); - - g_MaxCharWidth = tm.tmAveCharWidth; - g_Height = tm.tmHeight; - - ReleaseDC(hwnd, hdc); - } - else - { - // Already set - InterlockedDecrement(&g_SetCharDimensions); - } -} - - -// -// Given a member handle and a class item, find the TreeItem for that member -// -TreeItem_t *FindMemberInClass(ClassItem_t *pClassItem, HTREEITEM hMember) -{ - DWORD i; - - for (i = 0; i < pClassItem->SubItems; i++) - { - if (pClassItem->pMembers[i].hItem == hMember) - return &pClassItem->pMembers[i]; - } - - return NULL; -} - - -// -// Register the window classes -// -BOOL RegisterWindowClasses() -{ - _ASSERTE(g_hResources != NULL); - WNDCLASSW wndClass; - - wndClass.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW; - wndClass.lpfnWndProc = DisassemblyWndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = g_hInstance; - wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2)); - wndClass.hCursor = NULL; - wndClass.hbrBackground = g_hWhiteBrush; - wndClass.lpszMenuName = NULL; - wndClass.lpszClassName = DISASSEMBLY_CLASS_NAMEW; - if (WszRegisterClass((WNDCLASSW*)(&wndClass)) == 0) - return FALSE; - - wndClass.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW; - wndClass.lpfnWndProc = MainWndProc; - wndClass.cbClsExtra = 0; - wndClass.cbWndExtra = 0; - wndClass.hInstance = g_hInstance; - wndClass.hIcon = WszLoadIcon(g_hResources,MAKEINTRESOURCE(IDI_ICON2)); - wndClass.hCursor = NULL; - wndClass.hbrBackground = g_hWhiteBrush; - wndClass.lpszMenuName = NULL; - - wndClass.lpszClassName = MAIN_WINDOW_CLASSW; - if (WszRegisterClass((WNDCLASSW*)(&wndClass)) == 0) - return FALSE; - return TRUE; -} - -// -// Dump one item to global buffer -// -void GUIDumpItemToDisassemblyEditBox(void*pvDLB, mdToken cl, mdToken mbMember) -{ - const char * pszClassName; - const char * pszNamespace; - mdTypeRef crExtends; - DWORD dwClassAttrs; - - if ((cl != mdTokenNil)&&TypeFromToken(mbMember)) - { - if (FAILED(g_pImport->GetNameOfTypeDef(cl, &pszClassName, &pszNamespace))) - { - pszClassName = pszNamespace = "Invalid TypeDef record"; - } - MAKE_NAME_IF_NONE(pszClassName,cl); - } - else - { - pszClassName = (TypeFromToken(mbMember) == mdtMethodDef) ? "Global Functions" : "Global Fields"; - } - memset(GlobalBuffer,0,GlobalBufferLen); - InGlobalBuffer = 0; - - if (TypeFromToken(mbMember) && cl && (cl != mdTypeDefNil)) - { - if (FAILED(g_pImport->GetTypeDefProps(cl, &dwClassAttrs, &crExtends))) - { - dwClassAttrs = 0; - crExtends = mdTypeDefNil; - } - } - g_Mode |= MODE_GUI; - //_ASSERTE(0); - mdToken tkVarOwner = g_tkVarOwner; - g_tkVarOwner = cl; - if(g_fDumpRTF) DumpRTFPrefix(pvDLB,FALSE); - switch (TypeFromToken(mbMember)) - { - case 0: - switch(cl) - { - case 0: - DumpManifest(pvDLB); - DumpTypedefs(pvDLB); - break; - case IDM_SHOW_HEADER: - DumpHeader(g_CORHeader,pvDLB); - DumpHeaderDetails(g_CORHeader,pvDLB); - break; - case IDM_SHOW_METAINFO: - DumpMetaInfo(g_wszFullInputFile,NULL,pvDLB); - break; - case IDM_SHOW_STAT: - DumpStatistics(g_CORHeader,pvDLB); - break; - } - break; - - case mdtTypeDef: - DumpClass(mbMember,VAL32(g_CORHeader->EntryPointToken), pvDLB, 1); //1 = title+size+pack+custom attributes - break; - case mdtFieldDef: - { - ULONG ul1,ul2; - GetClassLayout(cl,&ul1,&ul2); - DumpField(mbMember,pszClassName, pvDLB, TRUE); - } - break; - case mdtMethodDef: - DumpMethod(mbMember,pszClassName,VAL32(g_CORHeader->EntryPointToken), pvDLB, TRUE); - break; - case mdtEvent: - DumpEvent(mbMember,pszClassName, dwClassAttrs, pvDLB, TRUE); - break; - case mdtProperty: - DumpProp(mbMember,pszClassName, dwClassAttrs, pvDLB, TRUE); - break; - } - if(g_fDumpRTF) DumpRTFPostfix(pvDLB); - g_tkVarOwner = tkVarOwner; - if(g_uCodePage==0xFFFFFFFF) - { - SendMessageW((HWND)pvDLB,WM_SETTEXT,0, (LPARAM)GlobalBuffer); - } - else - { - UINT32 L = (UINT32)strlen(GlobalBuffer); - WCHAR* wz = new (nothrow) WCHAR[L+4]; - if(wz) - { - memset(wz,0,sizeof(WCHAR)*(L+2)); - int x = WszMultiByteToWideChar(CP_UTF8,0,GlobalBuffer,-1,wz,L+2); - if(g_fDumpRTF) - { - x = (int)SendMessageA((HWND)pvDLB,WM_SETTEXT,0, (LPARAM)UnicodeToAnsi(wz)); - } - else - { - SETTEXTEX ste; - ste.flags = ST_DEFAULT; - ste.codepage = 1200; - x = (int)WszSendMessage((HWND)pvDLB,EM_SETTEXTEX,(WPARAM)&ste, (LPARAM)wz); - } - delete[] wz; - } - } -} - -// -// Disassemble the given method in a new window -// - -HWND GUIDisassemble(mdTypeDef cl, mdToken mbMember, __in __nullterminated char *pszNiceMemberName) -{ - HWND hwndDisassemblyMain; - HWND hwndDisassemblyListBox; - const char * pszClassName; - const char * pszNamespace; - char* szTemp=NULL; - RECT rcl; - static char szsz[4096]; - bool fUpdate = false; - bool fMetaInfo = (TypeFromToken(mbMember)==0)&&(cl==IDM_SHOW_METAINFO); - BOOL fDumpRTF = g_fDumpRTF; - if(fMetaInfo) g_fDumpRTF = FALSE; - - //before we even try, check if this member's disasm box is already opened - DisasmBox_t* pDisasmBox = FindDisasmBox(cl, mbMember); - if(pDisasmBox) - { - if(fMetaInfo || (0 == strcmp(pszNiceMemberName,"UpdateThisDisassemblyBox"))) - { - fUpdate = true; - } - else - { - PostMessageA(pDisasmBox->hwndContainer,WM_ACTIVATE,WA_CLICKACTIVE,0); - PostMessageA(pDisasmBox->hwndContainer,WM_SETFOCUS,0,0); - return pDisasmBox->hwndContainer; - } - } - if(fUpdate) - { - SendMessageW(pDisasmBox->hwndContainer,WM_GETTEXT, 0, (LPARAM)szsz); - strcpy_s(szsz,4096,UnicodeToUtf((WCHAR*)szsz)); - - szTemp = szsz; - PostMessageA(pDisasmBox->hwndContainer,WM_CLOSE,1,0); - } - else - { - // Prepend class name to nicely formatted member name - if (mbMember != 0) - { - if (cl != mdTokenNil) - { - if (FAILED(g_pImport->GetNameOfTypeDef( - cl, - &pszClassName, - &pszNamespace))) - { - pszClassName = pszNamespace = "Invalid TypeDef record"; - } - MAKE_NAME_IF_NONE(pszClassName,cl); - if(*pszNamespace != 0) - sprintf_s(szsz,4096,"%s.",pszNamespace); - else - szsz[0] = 0; - strcat_s(szsz,4096,pszClassName); - pszClassName = (const char*)&szsz[0]; - } - else - { - pszClassName = (TypeFromToken(mbMember) == mdtMethodDef) ? "Global Functions" : "Global Fields"; - } - szTemp = new (nothrow) char[strlen(pszClassName)+strlen(pszNiceMemberName)+4]; - if(szTemp) sprintf_s(szTemp, strlen(pszClassName)+strlen(pszNiceMemberName)+4,"%s::%s", pszClassName, pszNiceMemberName); - _ASSERTE(TypeFromToken(mbMember) & (mdtMethodDef|mdtEvent|mdtProperty|mdtTypeDef|mdtFieldDef)); - } - if(!szTemp) szTemp = pszNiceMemberName; - } - _ASSERTE(szTemp); - - HMENU hMenu = CreateMenu(); - WszAppendMenu(hMenu, MF_STRING, IDM_FIND, RstrW(IDS_FIND)); - WszAppendMenu(hMenu, MF_STRING, IDM_FINDNEXT, RstrW(IDS_FINDNEXT)); - - hwndDisassemblyMain = WszCreateWindowEx( - WS_EX_CLIENTEDGE, - DISASSEMBLY_CLASS_NAMEW, - UtfToUnicode(szTemp), - WS_OVERLAPPEDWINDOW | WS_SIZEBOX, - CW_USEDEFAULT, - CW_USEDEFAULT, - 640, - 400, - NULL, - hMenu, // menu - g_hInstance, // hinst - NULL - ); - SendMessageW(hwndDisassemblyMain,WM_SETTEXT, 0, (LPARAM)(UtfToUnicode(szTemp))); - - if((!fUpdate) && szTemp &&(szTemp != pszNiceMemberName)) delete[] szTemp; - if (hwndDisassemblyMain == NULL) - { - g_fDumpRTF = fDumpRTF; - return NULL; - } - GetClientRect(hwndDisassemblyMain, &rcl); - - hwndDisassemblyListBox = WszCreateWindowEx( - 0, - (!g_fDumpRTF) ? L"RichEdit20W" : L"RichEdit20A", - RstrW(IDS_TEXTTOOLARGEFORGUI), - WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE - | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL, - rcl.left, - rcl.top, - rcl.right - rcl.left, - rcl.bottom - rcl.top, - hwndDisassemblyMain, - (HMENU) ID_LISTBOX, - g_hInstance, // hinst - NULL - ); - - DWORD e = GetLastError(); - _ASSERTE(hwndDisassemblyListBox); - if (hwndDisassemblyListBox == NULL) - { - DestroyWindow(hwndDisassemblyMain); - return NULL; - } - - if(fUpdate) - { - UpdateDisasmBox(pDisasmBox, hwndDisassemblyMain, hwndDisassemblyListBox, hMenu); - } - else - AddDisasmBox(hwndDisassemblyMain, hwndDisassemblyListBox, hMenu, cl, mbMember); - - SendMessage(hwndDisassemblyListBox,EM_SETTEXTMODE,TM_RICHTEXT|TM_MULTICODEPAGE,0); - SendMessage(hwndDisassemblyListBox,EM_SETBKGNDCOLOR,0,GetSysColor(COLOR_INFOBK)); - SetWindowFontFixed(hwndDisassemblyListBox); - SetCharDimensions(hwndDisassemblyListBox); - - GUIDumpItemToDisassemblyEditBox((void *)hwndDisassemblyListBox,cl,mbMember); - - ShowWindow(hwndDisassemblyMain, SW_SHOWNORMAL); - UpdateWindow(hwndDisassemblyMain); - - g_fDumpRTF = fDumpRTF; - return hwndDisassemblyMain; -} - -// -// Callback by the disassembler to add another entry to the disassembly window -// -void GUIAddOpcode(__inout_opt __nullterminated const char *pszString, __in_opt void *GUICookie) -{ - if(pszString) - { - ULONG L = (g_uCodePage == 0xFFFFFFFF) ? (ULONG)(wcslen((WCHAR*)pszString)*sizeof(WCHAR)) : (ULONG)strlen(pszString); - if(InGlobalBuffer+L >= GlobalBufferLen-4) - { - ULONG LL = ((L >> 12)+1)<<12; - char *pch = new (nothrow) char[GlobalBufferLen + LL]; - if(pch) - { - memcpy(pch,GlobalBuffer,InGlobalBuffer+1); - delete[] GlobalBuffer; - GlobalBuffer = pch; - GlobalBufferLen += LL; - } - } - if(g_uCodePage == 0xFFFFFFFF) - { - if(g_fDumpRTF) - { - swprintf_s((WCHAR*)&GlobalBuffer[InGlobalBuffer], (GlobalBufferLen-InGlobalBuffer)/sizeof(WCHAR), L"%s\\line\r\n",(WCHAR*)pszString); - InGlobalBuffer += L+14; - } - else - { - swprintf_s((WCHAR*)&GlobalBuffer[InGlobalBuffer], (GlobalBufferLen-InGlobalBuffer)/sizeof(WCHAR), L"%s\r\n",(WCHAR*)pszString); - InGlobalBuffer += L+4; - } - } - else - { - if(g_fDumpRTF) - { - sprintf_s(&GlobalBuffer[InGlobalBuffer],GlobalBufferLen-InGlobalBuffer,"%s\\line\r\n",pszString); - InGlobalBuffer += L+7; - } - else - { - sprintf_s(&GlobalBuffer[InGlobalBuffer],GlobalBufferLen-InGlobalBuffer,"%s\r\n",pszString); - InGlobalBuffer += L+2; - } - } - } - else - { - delete[] GlobalBuffer; - GlobalBufferLen = 0; - InGlobalBuffer = 0; - } -} - -// -// Someone has double clicked on an item -// -// It could be a method (diassemble it), or a field (ignore it), or an "extends" or "implements" -// component, in which case we select that component if available. -// -HWND DoubleClickSelectedMember(HTREEITEM hItem) -{ - HTREEITEM hClass; - ClassItem_t *pClassItem; - - static HCURSOR hWaitCursor = NULL; - - if (hWaitCursor == NULL) - hWaitCursor = WszLoadCursor(NULL,IDC_WAIT); - - // - // It could be any item, but assume it's a member item or class info and find its parent - // - hClass = TreeView_GetParent(g_hwndTreeView, hItem); - if (hClass == NULL) - return NULL; - - // - // Find the class item given the HTREEITEM - // (will return NULL if hClass is not really a class item) - // - pClassItem = FindClassItem(hClass); - if (pClassItem != NULL) - { - // Which subitem was it? - TreeItem_t *pItem = FindMemberInClass(pClassItem, hItem); - - if (pItem == NULL) - return NULL; - - if (pItem->Discriminator == TREEITEM_TYPE_MEMBER) - { - TVITEMA SelItem; - char* szText; - // Must be a method, event or property - switch (TypeFromToken(pItem->mbMember)) - { - case mdtMethodDef: - case mdtEvent: - case mdtProperty: - case mdtFieldDef: - break; - default: - return NULL; - } - - - // Get the name of this item so that we can title the disassembly window - szText = new (nothrow) char[8192]; - if(szText) - { - memset(&SelItem, 0, sizeof(SelItem)); - SelItem.mask = TVIF_TEXT; - SelItem.pszText = szText; - SelItem.hItem = pItem->hItem; - SelItem.cchTextMax = 8192; - - WCHAR* wzText = (WCHAR*)szText; - SelItem.cchTextMax /= sizeof(WCHAR); - SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem); - unsigned L = ((unsigned)wcslen(wzText)+1)*3; - char* szUTFText = new (nothrow) char[L]; - if(szUTFText) - { - memset(szUTFText,0,L); - WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL); - delete[] wzText; - szText = szUTFText; - } - } - HCURSOR hWasCursor = SetCursor(hWaitCursor); - - HWND hRet = GUIDisassemble(pClassItem->cl, pItem->mbMember, szText? szText : ""); - if(szText) delete[] szText; - - SetCursor(hWasCursor); - - return hRet; - } - else if (pItem->Discriminator == TREEITEM_TYPE_INFO) - { - if(pItem->mbMember) - { - if(pItem->mbMember != 0xFFFFFFFF) - { - // We've clicked on an "extends X" or "implements Y", so select that class - SelectClassByToken(pItem->mbMember); - } - else - { - HCURSOR hWasCursor = SetCursor(hWaitCursor); - - HWND hRet = GUIDisassemble(0, 0, "MANIFEST"); - - SetCursor(hWasCursor); - return hRet; - } - } - else - { - TVITEMA SelItem; - char* szText = new (nothrow) char[8192]; - if(szText) - { - // Get the name of this item so that we can title the disassembly window - memset(&SelItem, 0, sizeof(SelItem)); - SelItem.mask = TVIF_TEXT; - SelItem.pszText = szText; - SelItem.hItem = pItem->hItem; - SelItem.cchTextMax = 8192; - - WCHAR* wzText = (WCHAR*)szText; - SelItem.cchTextMax /= sizeof(WCHAR); - SendMessageW(g_hwndTreeView, TVM_GETITEMW, 0, (LPARAM) (LPTVITEMW) &SelItem); - unsigned L = ((unsigned)wcslen(wzText)+1)*3; - char* szUTFText = new (nothrow) char[L]; - memset(szUTFText,0,L); - WszWideCharToMultiByte(CP_UTF8,0,wzText,-1,szUTFText,L,NULL,NULL); - delete[] wzText; - szText = szUTFText; - } - HCURSOR hWasCursor = SetCursor(hWaitCursor); - - HWND hRet = GUIDisassemble(pClassItem->cl, pClassItem->cl, szText ? szText : ""); - if(szText) delete[] szText; - - SetCursor(hWasCursor); - - return hRet; - } - } - } - return NULL; -} - - -void SelectClassByName(__in __nullterminated char *pszFQName) -{ - ClassItem_t *pDestItem; - - // Find namespace - char *p = ns::FindSep(pszFQName); - if (p == NULL) - { - pDestItem = FindClassItem(NULL, pszFQName); - } - else - { - char szBuffer[MAX_CLASSNAME_LENGTH]; - strncpy_s(szBuffer, MAX_CLASSNAME_LENGTH,pszFQName, p - pszFQName); - szBuffer[ p - pszFQName ] = '\0'; - pDestItem = FindClassItem(szBuffer, p+1); - } - - if (pDestItem != NULL) - { - SendMessageA(g_hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) (LPTVITEM) pDestItem->hItem); - } -} - -void SelectClassByToken(mdToken tk) -{ - if(TypeFromToken(tk)==mdtTypeDef) - { - ClassItem_t *pDestItem; - if(pDestItem = FindClassItem(tk)) - { - SendMessageA(g_hwndTreeView, TVM_SELECTITEM, TVGN_CARET, (LPARAM) (LPTVITEM) pDestItem->hItem); - } - } -} - -// -// Text search in rich text edit -// -void FindTextInListbox(HWND hwnd, FINDREPLACEW* lpfr) -{ - HWND hwndLB = FindAssociatedDisassemblyListBox(hwnd); - if(hwndLB) - { - FINDTEXTW strFind; - DWORD bgn,end; - SendMessage(hwndLB,EM_GETSEL,(WPARAM)&bgn,(LPARAM)&end); - if(lpfr->Flags & FR_DOWN) - { - strFind.chrg.cpMin=end; - strFind.chrg.cpMax=-1; - } - else - { - strFind.chrg.cpMin=bgn; - strFind.chrg.cpMax=0; - } - strFind.lpstrText=lpfr->lpstrFindWhat; - int pos = (int)SendMessage(hwndLB,EM_FINDTEXTW,(WPARAM)(lpfr->Flags),(LPARAM)&strFind); - if(pos >= 0) - { - //char sz[32]; - //sprintf_s(sz, _countof(sz), "%d:%d",strFind.chrg.cpMin,strFind.chrg.cpMax); - //MessageBox(hwnd,sz,"Find",MB_OK); - SendMessage(hwndLB,EM_SETSEL,(WPARAM)pos,(LPARAM)(pos+wcslen(lpfr->lpstrFindWhat))); - } - } -} - -// -// Disassembly window(s) WndProc -// -LRESULT CALLBACK DisassemblyWndProc( - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - static HBRUSH hBrush=NULL; - COLORREF crBackGr; - - static COLORREF crBackGrOld=NULL; - - if (crBackGrOld == NULL) - crBackGrOld = GetSysColor(COLOR_INFOBK); - - if(uMsg== g_uFindReplaceMsg) - { - FINDREPLACEW* lpfr = (FINDREPLACEW*)lParam; - if(!(lpfr->Flags & FR_DIALOGTERM)) - { - FindTextInListbox(hwnd,lpfr); - } - } - else - switch (uMsg) - { - case WM_CREATE: - hBrush = CreateSolidBrush(RGB(255,255,255)); - break; - - //===== Sent by Static (label) and Read-Only Edit field ===== - case WM_CTLCOLORSTATIC: - case WM_CTLCOLOREDIT: - if(hBrush) DeleteObject(hBrush); - crBackGr = GetSysColor(COLOR_INFOBK); - hBrush = CreateSolidBrush(crBackGr); - SetBkColor((HDC) wParam, crBackGr); - if(crBackGr != crBackGrOld) - { - g_strChFontDasm.rgbColors = GetSysColor(COLOR_INFOTEXT); - crBackGrOld = crBackGr; - } - SetTextColor((HDC) wParam, g_strChFontDasm.rgbColors); - return (LRESULT) hBrush; - - //====== Sent by active Edit field ============ - //case WM_CTLCOLOREDIT: - // if(hBrush) DeleteObject(hBrush); - // hBrush = CreateSolidBrush(RGB(255,255,255)); - // SetBkColor((HDC) wParam, RGB(255,255,255)); - // return (LRESULT) hBrush; - - // Ownerdraw stuff - case WM_MEASUREITEM: - { - ((MEASUREITEMSTRUCT *) (lParam))->itemHeight = g_Height; - break; - } - - // Ownerdraw stuff - case WM_DRAWITEM: - { - DRAWITEMSTRUCT *pDIS; - WCHAR wzBuf[1024]; - int ItemID; - - pDIS = (DRAWITEMSTRUCT *) lParam; - ItemID = (int) pDIS->itemID; - - if (ItemID < 0) - { - switch (pDIS->CtlType) - { - case ODT_LISTBOX: - { - if ((pDIS->itemAction) & (ODA_FOCUS)) - DrawFocusRect (PHDC, &PRC); - break; - } - - case ODT_COMBOBOX: - { - if ((pDIS->itemAction) & ODS_FOCUS) - DrawFocusRect(PHDC, &PRC); - break; - } - } - - return TRUE; - } - - switch (pDIS->CtlType) - { - case ODT_LISTBOX: - WszSendMessage(pDIS->hwndItem, LB_GETTEXT, pDIS->itemID, (LPARAM)wzBuf); - break; - - case ODT_COMBOBOX: - WszSendMessage(pDIS->hwndItem, CB_GETLBTEXT, pDIS->itemID, (LPARAM)wzBuf); - break; - } - - int crBack,crText; - HBRUSH hbrBack; - - if ((pDIS->itemState) & (ODS_SELECTED)) - { - crBack = GetSysColor(COLOR_HIGHLIGHT); - crText = GetSysColor(COLOR_HIGHLIGHTTEXT); - } - else - { - crBack = GetSysColor(COLOR_WINDOW); - crText = GetSysColor(COLOR_WINDOWTEXT); - } - - hbrBack = CreateSolidBrush(crBack); - FillRect(PHDC, &PRC, hbrBack); - DeleteObject(hbrBack); - - // 0x00bbggrr - SetBkColor(PHDC, crBack); - - // Instruction counter - if (wcslen(wzBuf) >= PADDING && isdigit(*wzBuf)) - { - SetTextColor(PHDC, 0x00FF0000); - TextOutW(PHDC, PRC.left, PRC.top, wzBuf, 5); - - SetTextColor(PHDC, 0x00005500); - TextOutW(PHDC, PRC.left + (5*g_MaxCharWidth), PRC.top, &wzBuf[5], PADDING-5); - - SetTextColor(PHDC, crText); - TextOutW(PHDC, PRC.left + (PADDING*g_MaxCharWidth), PRC.top, &wzBuf[PADDING], (UINT32)wcslen(&wzBuf[PADDING])); - } - else - TextOutW(PHDC, PRC.left, PRC.top, wzBuf, (UINT32)wcslen(wzBuf)); - - if ((pDIS->itemState) & (ODS_FOCUS)) - DrawFocusRect(PHDC, &PRC); - - break; - } - - - case WM_COMMAND: - { - if(HIWORD(wParam) > 1) break; // we are interested in commands from menu only - switch (LOWORD(wParam)) - { - case IDM_FIND: - { - HWND hwndLB = FindAssociatedDisassemblyListBox(hwnd); - if(hwndLB) - { - FINDREPLACEW *pFR = &(FindDisasmBoxByHwnd(hwnd)->strFR); - if(pFR && (pFR->Flags&FR_DIALOGTERM)) // i.e., if the box isn't up - { - DWORD bgn,end; - WszSendMessage(hwndLB,EM_GETSEL,(WPARAM)&bgn,(LPARAM)&end); - if(end > bgn) - { - if(end - bgn > 119) - SendMessage(hwndLB,EM_SETSEL,(WPARAM)bgn,(LPARAM)(bgn+119)); - SendMessage(hwndLB,EM_GETSELTEXT,0,(LPARAM)(pFR->lpstrFindWhat)); - } - pFR->Flags &= ~FR_DIALOGTERM; - g_hFindText = FindTextW(pFR); - } - } - } - break; - case IDM_FINDNEXT: - { - FindTextInListbox(hwnd,&(FindDisasmBoxByHwnd(hwnd)->strFR)); - } - break; - } - break; - } - - case WM_SETFOCUS: - SetFocus(FindAssociatedDisassemblyListBox(hwnd)); - break; - - case WM_SIZE: - { - DWORD cxClient = LOWORD(lParam); - DWORD cyClient = HIWORD(lParam); - HWND hListView; - - // We have to size the listview also - - // Will be NULL if we are ourselves a listview - hListView = FindAssociatedDisassemblyListBox(hwnd); - - if (hListView != NULL) - { - // Resize listview window - MoveWindow( - hListView, - 0, - 0, - cxClient, - cyClient, - TRUE // repaint - ); - } - - break; - } - - case WM_CLOSE: - if(hBrush) DeleteObject(hBrush); - if(LOWORD(wParam)==0) RemoveDisasmBox(hwnd); - DestroyWindow(hwnd); // Generates the WM_DESTROY message - - // Shutdown everything if we're just viewing GUI IL and close all our boxes - if (IsGuiILOnly() && (g_NumDisasmBoxes == 0)) { - PostQuitMessage(0); - } - - break; - - default : - return WszDefWindowProc(hwnd, uMsg, wParam, lParam); - } - - return 0; -} - -BOOL CALLBACK AboutBoxProc(HWND hwndDlg, // handle to dialog box - UINT uMsg, // message - WPARAM wParam, // first message parameter - LPARAM lParam) // second message parameter -{ - switch(uMsg) - { - case WM_INITDIALOG: - { - WCHAR str[1024]; - WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE1,WM_SETTEXT,0, - (LPARAM)RstrW(IDS_ILDASM_TITLE)); - swprintf_s(str,1024,RstrW(IDS_VERSION), VER_FILEVERSION_STR_L); str[1023]=0; - WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE2,WM_SETTEXT,0,(LPARAM)str); - WszSendDlgItemMessage(hwndDlg,IDC_ABOUT_LINE3,WM_SETTEXT,0, - (LPARAM)RstrW(IDS_LEGALCOPYRIGHT)); - } - return TRUE; - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case ID_ABOUT_OK: - EndDialog(hwndDlg,0); - return TRUE; - } - break; - - } - return FALSE; -} - -BOOL CALLBACK DumpOptionsProc(HWND hwndDlg, // handle to dialog box - UINT uMsg, // message - WPARAM wParam, // first message parameter - LPARAM lParam) // second message parameter -{ - static BOOL fAsmChecked; - static BOOL fMetaChecked; - static ULONG uCodePage = 0; - - if (uCodePage == 0) - uCodePage = g_uCodePage; - - switch(uMsg) - { - case WM_INITDIALOG: - WszSendDlgItemMessage(hwndDlg,IDC_RADIO1,BM_SETCHECK,(uCodePage==g_uConsoleCP ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_RADIO2,BM_SETCHECK,(uCodePage==CP_UTF8 ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_RADIO3,BM_SETCHECK,(uCodePage==0xFFFFFFFF ? BST_CHECKED : BST_UNCHECKED),0); - - - WszSendDlgItemMessage(hwndDlg,IDC_CHECK18,BM_SETCHECK,(g_fShowProgressBar ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK1, BM_SETCHECK,(g_fDumpHeader ? BST_CHECKED : BST_UNCHECKED),0); - if(g_fTDC) - { - WszSendDlgItemMessage(hwndDlg,IDC_CHECK2, BM_SETCHECK,(g_fDumpStats ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK19, BM_SETCHECK,(g_fDumpClassList ? BST_CHECKED : BST_UNCHECKED),0); - } - else - { - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK2), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK19), SW_HIDE); - } - WszSendDlgItemMessage(hwndDlg,IDC_CHECK3, BM_SETCHECK,(g_fDumpAsmCode ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK4, BM_SETCHECK,(g_fDumpTokens ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK5, BM_SETCHECK,(g_fShowBytes ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK6, BM_SETCHECK,(g_fShowSource ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK20, BM_SETCHECK,(g_fInsertSourceLines ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK7, BM_SETCHECK,(g_fTryInCode ? BST_CHECKED : BST_UNCHECKED),0); - if(!(fAsmChecked = g_fDumpAsmCode)) - { - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK4), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK5), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK6), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK7), FALSE); - } - if(g_fTDC) - { - WszSendDlgItemMessage(hwndDlg,IDC_CHECK8, BM_SETCHECK,(g_fDumpMetaInfo ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK10,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpHeader ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK11,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK12,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpCSV ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK13,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpUnsat ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK16,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpValidate ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK14,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpSchema ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK15,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpRaw ? BST_CHECKED : BST_UNCHECKED),0); - WszSendDlgItemMessage(hwndDlg,IDC_CHECK17,BM_SETCHECK,(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? BST_CHECKED : BST_UNCHECKED),0); - if(!(fMetaChecked = g_fDumpMetaInfo)) - { - //EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK9), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK10), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK11), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK12), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK13), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK14), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK15), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK16), FALSE); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK17), FALSE); - } - } - else - { - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK8), SW_HIDE); - //ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK9), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK10), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK11), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK12), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK13), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK14), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK15), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK16), SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK17), SW_HIDE); - } - ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK9), SW_HIDE); - return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDC_CHECK3: - fAsmChecked = !fAsmChecked; - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK4), fAsmChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK5), fAsmChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK6), fAsmChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK7), fAsmChecked); - return TRUE; - - case IDC_CHECK8: - fMetaChecked = !fMetaChecked; - //EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK9), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK10), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK11), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK12), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK13), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK14), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK15), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK16), fMetaChecked); - EnableWindow(GetDlgItem(hwndDlg,IDC_CHECK17), fMetaChecked); - return TRUE; - - case IDOK: - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO1, BM_GETCHECK,0,0)) g_uCodePage = g_uConsoleCP; - else if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO2, BM_GETCHECK,0,0)) g_uCodePage = CP_UTF8; - else if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_RADIO3, BM_GETCHECK,0,0)) g_uCodePage = 0xFFFFFFFF; - uCodePage = g_uCodePage; - - g_fShowProgressBar = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK18, BM_GETCHECK,0,0)); - g_fDumpHeader = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK1, BM_GETCHECK,0,0)); - if(g_fTDC) - { - g_fDumpStats = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK2, BM_GETCHECK,0,0)); - g_fDumpClassList = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK19, BM_GETCHECK,0,0)); - } - g_fDumpAsmCode = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK3, BM_GETCHECK,0,0)); - g_fDumpTokens = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK4, BM_GETCHECK,0,0)); - g_fShowBytes = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK5, BM_GETCHECK,0,0)); - g_fShowSource = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK6, BM_GETCHECK,0,0)); - g_fInsertSourceLines = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK20, BM_GETCHECK,0,0)); - g_fTryInCode = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK7, BM_GETCHECK,0,0)); - if(g_fTDC) - { - g_fDumpMetaInfo = (BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK8, BM_GETCHECK,0,0)); - g_ulMetaInfoFilter = 0; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK10, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpHeader; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK11, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpMoreHex; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK12, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpCSV; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK13, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpUnsat; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK16, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpValidate; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK14, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpSchema; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK15, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpRaw; - if(BST_CHECKED==WszSendDlgItemMessage(hwndDlg,IDC_CHECK17, BM_GETCHECK,0,0)) g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps; - } - EndDialog(hwndDlg,1); - return TRUE; - - case IDCANCEL: - EndDialog(hwndDlg,0); - return TRUE; - } - break; - - } - return FALSE; -} - -static HWND help_hw; -void * __cdecl HelpFileLoader(_In_z_ LPCWSTR lpHelpFileName) -{ - return HtmlHelpW(help_hw, lpHelpFileName, HH_DISPLAY_TOPIC, NULL); -} - -// -// Main window WndProc -// -#define CHECK_UNCHECK(x) { x=!x; CheckMenuItem(g_hMenu, LOWORD(wParam), (x ? MF_CHECKED : MF_UNCHECKED)); } - -#ifdef _PREFAST_ -#pragma warning(push) -#pragma warning(disable:21000) // Suppress PREFast warning about overly large function -#endif -LRESULT CALLBACK MainWndProc( - HWND hwnd, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - HWND hwndDasm; - static HCURSOR hWaitCursor = NULL; - - if (hWaitCursor == NULL) - hWaitCursor = WszLoadCursor(NULL,IDC_WAIT); - - switch (uMsg) - { - case WM_DROPFILES: - { - WCHAR wzFileName[MAX_FILENAME_LENGTH]; - DragQueryFileW((HDROP)wParam,0,wzFileName,MAX_FILENAME_LENGTH-1); - memset(g_szInputFile,0,MAX_FILENAME_LENGTH); - WszWideCharToMultiByte(CP_UTF8,0,wzFileName,-1,g_szInputFile,MAX_FILENAME_LENGTH-1,NULL,NULL); - GetInputFileFullPath(); - { - HCURSOR hWasCursor = SetCursor(hWaitCursor); - GUICleanupClassItems(); - TreeView_DeleteAllItems(g_hwndTreeView); - Cleanup(); - GUISetModule(g_szInputFile); - DumpFile(); - SetCursor(hWasCursor); - } - DragFinish((HDROP)wParam); - } - break; - - case WM_COMMAND: - { - if(HIWORD(wParam) > 1) break; // we are interested in commands from menu only - switch (LOWORD(wParam)) - { - case IDM_OPEN: - { - WCHAR wzInputFile[MAX_FILENAME_LENGTH]; - memset(wzInputFile,0,sizeof(wzInputFile)); - if(strlen(g_szInputFile)) - { - WszMultiByteToWideChar(CP_UTF8,0,g_szInputFile,-1,wzInputFile,MAX_FILENAME_LENGTH-1); - } - { - OPENFILENAMEW ofn; - WCHAR* wzFilter = RstrW(IDS_FILTER_IN); //L"PE file (*.exe,*.dll,*.mod,*.mdl,*.winmd)\0*.exe;*.dll;*.mod;*.mdl;*.winmd\0Any type (*.*)\0*.*\0\0"; - const WCHAR* wzDefltExt = L"exe"; - for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0; - memset(&ofn,0,sizeof(OPENFILENAMEW)); - ofn.lStructSize = sizeof(OPENFILENAMEW); - ofn.hwndOwner = hwnd; - ofn.lpstrFilter = wzFilter; - ofn.nFilterIndex = 0; - ofn.lpstrFile = wzInputFile; - ofn.nMaxFile = MAX_FILENAME_LENGTH-1; - ofn.Flags = OFN_FILEMUSTEXIST; - ofn.lpstrDefExt = wzDefltExt; - if(GetOpenFileName(&ofn)) - { - HCURSOR hWasCursor = SetCursor(hWaitCursor); - GUICleanupClassItems(); - TreeView_DeleteAllItems(g_hwndTreeView); - Cleanup(); - memset(g_szInputFile,0,MAX_FILENAME_LENGTH); - WszWideCharToMultiByte(CP_UTF8,0,wzInputFile,-1,g_szInputFile,MAX_FILENAME_LENGTH-1,NULL,NULL); - GetInputFileFullPath(); - GUISetModule(g_szInputFile); - DumpFile(); - SetCursor(hWasCursor); - } - } - break; - } - case IDM_ABOUT: - { - _ASSERTE(g_hResources != NULL); - WszDialogBoxParam(g_hResources,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)AboutBoxProc,0L); - break; - } - case IDM_DUMP: - //case IDM_DUMP_TREE: - if(g_pImport) - { - unsigned uWasCodePage = g_uCodePage; - WCHAR wzOutputFile[MAX_FILENAME_LENGTH]; - memset(wzOutputFile,0,sizeof(wzOutputFile)); - if(strlen(g_szOutputFile)) - { - WszMultiByteToWideChar(CP_UTF8,0,g_szOutputFile,-1,wzOutputFile,MAX_FILENAME_LENGTH-1); - } - { - OPENFILENAMEW ofn; - WCHAR* wzFilter = RstrW(IDS_FILTER_OUT);//L"IL file (*.il)\0*.il\0Text file (*.txt) \0*.txt\0Any type (*.*)\0*.*\0\0"; - const WCHAR* wzDefltExt = L"il"; - for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0; - memset(&ofn,0,sizeof(OPENFILENAMEW)); - ofn.lStructSize = sizeof(OPENFILENAMEW); - ofn.hwndOwner = hwnd; - ofn.lpstrFilter = wzFilter; - ofn.nFilterIndex = 0; - ofn.lpstrFile = wzOutputFile; - ofn.nMaxFile = MAX_FILENAME_LENGTH-1; - ofn.Flags = OFN_OVERWRITEPROMPT; - ofn.lpstrDefExt = wzDefltExt; - _ASSERTE(g_hResources != NULL); - if(WszDialogBoxParam(g_hResources,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DumpOptionsProc,0L) && - GetSaveFileName(&ofn)) - { - HCURSOR hWasCursor = SetCursor(hWaitCursor); - g_Mode &= ~MODE_GUI; - memset(g_szOutputFile,0,MAX_FILENAME_LENGTH); - WszWideCharToMultiByte(CP_UTF8,0,wzOutputFile,-1,g_szOutputFile,MAX_FILENAME_LENGTH-1,NULL,NULL); - g_pFile = OpenOutput(wzOutputFile); - if(g_pFile) - { - DumpFile(); // closes g_pFile upon completion - SetCursor(hWasCursor); - } - else - { - SetCursor(hWasCursor); - WszMessageBox(hwnd,wzOutputFile,RstrW(IDS_CANNOTOPENFILE),MB_OK|MB_ICONERROR | GetDasmMBRTLStyle()); - } - g_szOutputFile[0] = 0; - g_Mode |= MODE_GUI; - //g_fShowSource = FALSE; // flag could have been changed for dump - } - } - g_uCodePage = uWasCodePage; // g_uCodePage is changed in DumpOptionsProc - } - break; - - case IDM_DUMP_TREE: - if(g_pImport) - { - // Dump the tree view(fully expanded, with current sorting) to a text file - OPENFILENAMEW ofn; - WCHAR* wzFilter = RstrW(IDS_FILTER_OUT2); //L"Text file (*.txt) \0*.txt\0Any type (*.*)\0*.*\0\0"; - const WCHAR* wzDefltExt = L"txt"; - WCHAR szIndent[MAX_FILENAME_LENGTH]; - FILE* pFile; - WCHAR wzOutputFile[MAX_FILENAME_LENGTH]; - for(WCHAR* pwc = wzFilter; pwc = wcschr(pwc,'\t'); pwc++) *pwc = 0; - memset(wzOutputFile,0,sizeof(wzOutputFile)); - memset(&ofn,0,sizeof(OPENFILENAMEW)); - ofn.lStructSize = sizeof(OPENFILENAMEW); - ofn.hwndOwner = hwnd; - ofn.lpstrFilter = wzFilter; - ofn.nFilterIndex = 0; - ofn.lpstrFile = wzOutputFile; - ofn.nMaxFile = MAX_FILENAME_LENGTH-1; - ofn.Flags = OFN_OVERWRITEPROMPT; - ofn.lpstrDefExt = wzDefltExt; - if(GetSaveFileName(&ofn)) - { - HCURSOR hWasCursor = SetCursor(hWaitCursor); - pFile = g_pFile; - g_pFile = OpenOutput(wzOutputFile); - szIndent[0] = 0; - if(g_pFile) - { - g_Mode &= ~MODE_GUI; - DumpTreeItem(g_hRoot,g_pFile,szIndent); - g_Mode |= MODE_GUI; - fclose(g_pFile); - SetCursor(hWasCursor); - } - else - { - SetCursor(hWasCursor); - WszMessageBox(hwnd,wzOutputFile,RstrW(IDS_CANNOTOPENFILE),MB_OK|MB_ICONERROR | GetDasmMBRTLStyle()); - } - g_pFile = pFile; - } - } - break; - - case IDM_EXIT: - { - WszSendMessage(GetActiveWindow(),WM_CLOSE,0,0); - } - break; - - case IDM_FONT_TREE: - { - g_strChFontTree.hwndOwner = g_hwndMain; - if(ChooseFont(&g_strChFontTree)) - { - DeleteObject((HGDIOBJ)g_hSmallFont); - g_hSmallFont = CreateFontIndirect(&g_strLogFontTree); - WszSendMessage(g_hwndTreeView,WM_SETFONT,(LPARAM) g_hSmallFont,TRUE); - if(g_hwndAsmInfo) - WszSendMessage(g_hwndAsmInfo,WM_SETFONT,(LPARAM) g_hSmallFont,TRUE); - SaveGUIFonts(&guiInfo); - } - break; - } - - case IDM_FONT_DASM: - { - g_strChFontDasm.hwndOwner = g_hwndMain; - if(ChooseFont(&g_strChFontDasm)) - { - if(g_fDumpRTF) { g_strLogFontDasm.lfWeight = FW_REGULAR; g_strLogFontDasm.lfItalic = FALSE; } - DeleteObject((HGDIOBJ)g_hFixedFont); - g_hFixedFont = CreateFontIndirect(&g_strLogFontDasm); - - for (DWORD i = 0; i < g_NumDisasmBoxes; i++) - { - WszSendMessage((*g_DisasmBox)[i].hwndChild,WM_SETFONT,(LPARAM)g_hFixedFont,TRUE); - if(g_fDumpRTF) - GUIDumpItemToDisassemblyEditBox((void*)(*g_DisasmBox)[i].hwndChild, - (*g_DisasmBox)[i].tkClass,(*g_DisasmBox)[i].tkMember); - } - SaveGUIFonts(&guiInfo); - } - break; - } - - case IDM_CAVERBAL: - { - CHECK_UNCHECK(g_fCAVerbal); - for (DWORD i = 0; i < g_NumDisasmBoxes; i++) - { - GUIDumpItemToDisassemblyEditBox((void*)(*g_DisasmBox)[i].hwndChild, - (*g_DisasmBox)[i].tkClass, - (*g_DisasmBox)[i].tkMember); - } - break; - } - - case IDM_DUMPRTF: - { - CHECK_UNCHECK(g_fDumpRTF); - //GUIDumpAssemblyInfo(); - for (DWORD i = 0; i < g_NumDisasmBoxes; i++) - { - mdToken tkClass = (*g_DisasmBox)[i].tkClass; - mdToken tkMember = (*g_DisasmBox)[i].tkMember; - if((TypeFromToken(tkMember)==0)&&(tkClass==IDM_SHOW_METAINFO)) - continue; - GUIDisassemble(tkClass,tkMember,"UpdateThisDisassemblyBox"); - } - break; - } - - case IDM_SORT_BY_NAME: - { - CHECK_UNCHECK(g_fSortByName); - if(g_pImport) - { - if(!RefreshList()) goto CloseAndDestroy; - } - break; - } - - case IDM_TREEVIEWFCN: - { - CHECK_UNCHECK(g_fTreeViewFCN); - if(g_pImport) - { - if(!RefreshList()) goto CloseAndDestroy; - } - break; - } - - case IDM_SHOW_PUB: - { - CHECK_UNCHECK(g_fHidePub); -UpdateVisibilityOptions: - g_fLimitedVisibility = g_fHidePub || - g_fHidePriv || - g_fHideFam || - g_fHideFAA || - g_fHideFOA || - g_fHidePrivScope || - g_fHideAsm; - if(g_pImport) - { - if(!RefreshList()) DestroyWindow(hwnd); - } - break; - } - case IDM_SHOW_PRIV: - { - CHECK_UNCHECK(g_fHidePriv); - goto UpdateVisibilityOptions; - } - case IDM_SHOW_FAM: - { - CHECK_UNCHECK(g_fHideFam); - goto UpdateVisibilityOptions; - } - case IDM_SHOW_ASM: - { - CHECK_UNCHECK(g_fHideAsm); - goto UpdateVisibilityOptions; - } - case IDM_SHOW_FAA: - { - CHECK_UNCHECK(g_fHideFAA); - goto UpdateVisibilityOptions; - } - case IDM_SHOW_FOA: - { - CHECK_UNCHECK(g_fHideFOA); - goto UpdateVisibilityOptions; - } - case IDM_SHOW_PSCOPE: - { - CHECK_UNCHECK(g_fHidePrivScope); - goto UpdateVisibilityOptions; - } - case IDM_FULL_INFO: - { - CHECK_UNCHECK(g_fFullMemberInfo); - if(g_pImport) - { - if(!RefreshList()) DestroyWindow(hwnd); - } - break; - } - case IDM_BYTES: - { - CHECK_UNCHECK(g_fShowBytes); - break; - } - case IDM_TOKENS: - { - CHECK_UNCHECK(g_fDumpTokens); - break; - } - case IDM_SOURCELINES: - { - CHECK_UNCHECK(g_fShowSource); - break; - } - case IDM_EXPANDTRY: - { - CHECK_UNCHECK(g_fTryInCode); - break; - } - case IDM_QUOTEALLNAMES: - { - CHECK_UNCHECK(g_fQuoteAllNames); - break; - } - case IDM_SHOW_HEADER: - { - GUIDisassemble(IDM_SHOW_HEADER,0,"Headers"); - break; - } - case IDM_SHOW_STAT: - { - GUIDisassemble(IDM_SHOW_STAT,0,"Statistics"); - break; - } - case IDM_HELP: - { - help_hw = hwnd; - FindLocalizedFile(L"ildasm.chm", &HelpFileLoader); - break; - } - case IDM_SHOW_METAINFO: - { - if(g_pImport) - GUIDisassemble(IDM_SHOW_METAINFO,0,"MetaInfo"); - break; - } - case IDM_MI_HEADER: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpHeader) g_ulMetaInfoFilter &= ~MDInfo::dumpHeader; - else g_ulMetaInfoFilter |= MDInfo::dumpHeader; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpHeader ? MF_CHECKED : MF_UNCHECKED)); - if(g_ulMetaInfoFilter & MDInfo::dumpHeader) - { - // HeaderOnly specified, - // Suppress Counts,Sizes, Header,Schema and Header,Schema,Rows - g_ulMetaInfoFilter &= ~MDInfo::dumpCSV; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpSchema; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpRaw; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED); - } - return 1; //break; - } - case IDM_MI_HEX: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpMoreHex) g_ulMetaInfoFilter &= ~MDInfo::dumpMoreHex; - else g_ulMetaInfoFilter |= MDInfo::dumpMoreHex; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpMoreHex ? MF_CHECKED : MF_UNCHECKED)); - return 1; //break; - } - case IDM_MI_CSV: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpCSV) g_ulMetaInfoFilter &= ~MDInfo::dumpCSV; - else g_ulMetaInfoFilter |= MDInfo::dumpCSV; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpCSV ? MF_CHECKED : MF_UNCHECKED)); - if(g_ulMetaInfoFilter & MDInfo::dumpCSV) - { - // Counts,Sizes specified, - // Suppress HeaderOnly, Header,Schema and Header,Schema,Rows - g_ulMetaInfoFilter &= ~MDInfo::dumpHeader; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpSchema; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpRaw; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED); - } - return 1; //break; - } - case IDM_MI_UNREX: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpUnsat) g_ulMetaInfoFilter &= ~MDInfo::dumpUnsat; - else g_ulMetaInfoFilter |= MDInfo::dumpUnsat; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpUnsat ? MF_CHECKED : MF_UNCHECKED)); - return 1; //break; - } - case IDM_MI_SCHEMA: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpSchema) g_ulMetaInfoFilter &= ~MDInfo::dumpSchema; - else g_ulMetaInfoFilter |= MDInfo::dumpSchema; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpSchema ? MF_CHECKED : MF_UNCHECKED)); - if(g_ulMetaInfoFilter & MDInfo::dumpSchema) - { - // Header,Schema specified, - // suppress Counts,Sizes, HeaderOnly and Header,Schema,Rows - g_ulMetaInfoFilter &= ~MDInfo::dumpCSV; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpHeader; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpRaw; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_RAW, MF_UNCHECKED); - } - return 1; //break; - } - case IDM_MI_RAW: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpRaw) g_ulMetaInfoFilter &= ~MDInfo::dumpRaw; - else g_ulMetaInfoFilter |= MDInfo::dumpRaw; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpRaw ? MF_CHECKED : MF_UNCHECKED)); - if(g_ulMetaInfoFilter & MDInfo::dumpRaw) - { - // Header,Schema,Rows specified, - // suppress Counts,Sizes, HeaderOnly and Header,Schema - g_ulMetaInfoFilter &= ~MDInfo::dumpCSV; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_CSV, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpHeader; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_HEADER, MF_UNCHECKED); - g_ulMetaInfoFilter &= ~MDInfo::dumpSchema; - CheckMenuItem(g_hMetaInfoMenu, IDM_MI_SCHEMA, MF_UNCHECKED); - } - return 1; //break; - } - case IDM_MI_HEAPS: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpRawHeaps) g_ulMetaInfoFilter &= ~MDInfo::dumpRawHeaps; - else g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpRawHeaps ? MF_CHECKED : MF_UNCHECKED)); - return 1; //break; - } - case IDM_MI_VALIDATE: - { - WORD iSelection = LOWORD(wParam); - if(g_ulMetaInfoFilter & MDInfo::dumpValidate) g_ulMetaInfoFilter &= ~MDInfo::dumpValidate; - else g_ulMetaInfoFilter |= MDInfo::dumpValidate; - CheckMenuItem(g_hMetaInfoMenu, iSelection, (g_ulMetaInfoFilter & MDInfo::dumpValidate ? MF_CHECKED : MF_UNCHECKED)); - return 1; //break; - } - - } - - break; - } - - case WM_SETFOCUS: - SetFocus(g_hwndTreeView); - break; - - case WM_SIZE: - { - DWORD cxClient = LOWORD(lParam); - DWORD cyClient = HIWORD(lParam); - DWORD dy; - - dy = cyClient >> 3; - if(dy < 50) dy = 50; - if(cyClient < dy+4) cyClient = dy+4; - - // Resize listview window - MoveWindow( - g_hwndTreeView, - 0, - 0, - cxClient, - cyClient-dy-2, - TRUE // repaint - ); - // Resize AsmInfo window - MoveWindow( - g_hwndAsmInfo, - 0, - cyClient-dy-1, - cxClient, - dy, - TRUE // repaint - ); - - break; - } - - case WM_NOTIFY: - { - if (wParam == ID_TREEVIEW) - { - NMHDR * pNMHDR = (NMHDR*) lParam; - switch (pNMHDR->code) - { - case TVN_KEYDOWN: - { - NMTVKEYDOWN *pKeyDown = (NMTVKEYDOWN *) pNMHDR; - - if (pKeyDown->wVKey == '\r') - { - if(DoubleClickSelectedMember(g_CurSelItem) == NULL) - TreeView_Expand(g_hwndTreeView,g_CurSelItem,TVE_TOGGLE); - } - break; - } - - case NM_DBLCLK: - { - hwndDasm = DoubleClickSelectedMember(g_CurSelItem); - if(hwndDasm) - { - PostMessageA(hwndDasm,WM_ACTIVATE,WA_CLICKACTIVE,0); - PostMessageA(hwndDasm,WM_SETFOCUS,0,0); - } - break; - } - - case TVN_SELCHANGEDW: - case TVN_SELCHANGEDA: - { - NMTREEVIEW *pTV = (NMTREEVIEW *) pNMHDR; - /* - TVITEM SelItem; - char szText[256]; - - memset(&SelItem, 0, sizeof(SelItem)); - SelItem.mask = TVIF_TEXT; - SelItem.pszText = szText; - SelItem.cchTextMax = sizeof(szText)-1; - SelItem.hItem = pTV->itemNew.hItem; - - g_CurSelItem = SelItem.hItem; - SendMessageA(g_hwndTreeView, TVM_GETITEM, 0, (LPARAM)&SelItem); - */ - g_CurSelItem = pTV->itemNew.hItem; - break; - } - } - } - - break; - } - - case WM_CLOSE: - CloseAndDestroy: - // HTML help window is closed automatically - { - RECT r; - ShowWindow(hwnd,SW_RESTORE); - GetWindowRect(hwnd,(LPRECT)&r); - guiInfo.x = r.left; - guiInfo.y = r.top; - guiInfo.w = r.right - r.left; - guiInfo.h = r.bottom - r.top; - SaveGUIFonts(&guiInfo); - } - DestroyWindow(hwnd); // Generates the WM_DESTROY message - break; - - case WM_DESTROY : - PostQuitMessage(0); // Puts a WM_QUIT in the queue - break; - - default : - return DefWindowProcW(hwnd, uMsg, wParam, lParam); - } - - return 0; -} -#ifdef _PREFAST_ -#pragma warning(pop) -#endif - - -// -// Create the treeview in the main window -// -HWND CreateTreeView(HWND hwndParent) -{ - HWND hwndTree; - RECT rcl; - DWORD tvs = - TVS_HASLINES - |TVS_HASBUTTONS - |TVS_LINESATROOT - |TVS_SHOWSELALWAYS - // |TVS_TRACKSELECT - // |TVS_SINGLEEXPAND - |TVS_DISABLEDRAGDROP - ; - unsigned cy,dy; - - GetClientRect(hwndParent, &rcl); - cy = rcl.bottom - rcl.top; - dy = cy >> 3; - hwndTree = WszCreateWindowEx( - 0, - WC_TREEVIEWW, - NULL, - WS_VISIBLE|WS_CHILD|WS_BORDER|tvs, - 0, - 0, - rcl.right - rcl.left, - cy-dy-2, //rcl.bottom - rcl.top, - hwndParent, - (HMENU) ID_TREEVIEW, - g_hInstance, - NULL - ); - g_hwndAsmInfo = NULL; - if (hwndTree == NULL) - return NULL; - - WszSendMessage(hwndTree,WM_SETFONT,(LPARAM) g_hSmallFont,FALSE); - - TreeView_SetBkColor(hwndTree,-1); - TreeView_SetImageList(hwndTree, g_hImageList, TVSIL_NORMAL); - - g_hwndAsmInfo = WszCreateWindowEx( - 0, //WS_EX_TOOLWINDOW, - g_fDumpRTF ? L"RichEdit20A" : L"EDIT", - NULL, - WS_CHILD | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE | WS_BORDER //| WS_CAPTION | WS_OVERLAPPEDWINDOW - | ES_MULTILINE | ES_READONLY | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_NOHIDESEL, - 0, - cy-dy-1, - rcl.right - rcl.left, - dy, - hwndParent, - (HMENU) ID_LISTBOX, - g_hInstance, // hinst - NULL - ); - if(g_hwndAsmInfo) - { - WszSendMessage(g_hwndAsmInfo,WM_SETFONT,(LPARAM) g_hSmallFont,FALSE); - } - - return hwndTree; -} - - -// -// Add one item to a treeview -// -HTREEITEM AddOneItem(HTREEITEM hParent, const char *pszText, HTREEITEM hInsAfter, int iImage, HWND hwndTree, BOOL fExpanded) -{ - HTREEITEM hItem; - WCHAR* wz = UtfToUnicode(pszText); - ULONG lLen = (ULONG)wcslen(wz); - TVINSERTSTRUCTW tvIns; - memset(&tvIns, 0, sizeof(tvIns)); - - tvIns.item.mask = TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; - tvIns.item.pszText = wz; - tvIns.item.cchTextMax = lLen; - tvIns.item.iImage = iImage; - tvIns.item.iSelectedImage = iImage; - - tvIns.hInsertAfter = hInsAfter; - tvIns.hParent = hParent; - - hItem = (HTREEITEM)WszSendMessage(hwndTree, TVM_INSERTITEMW, 0, (LPARAM)(&tvIns)); - - return hItem; -} - -#ifdef _PREFAST_ -#pragma warning(push) -#pragma warning(disable:22018) // Suppress PREFast warning about Integer overflow/underflow -#endif -//ulen cannot be greater than GlobalBufferLen by the definition of ulen. Therefore it's safe to disable this warning here. -void AddMethodToGUI( - mdTypeDef cl, - ClassItem_t * pClassItem, - const char *pszNamespace, - const char *pszClassName, - const char *pszMethodName, - PCCOR_SIGNATURE pComSig, - unsigned cComSig, - mdMethodDef mbMethod, - DWORD dwAttrs -) -{ - HTREEITEM hParent; - char* szName; - ULONG ulLen,ulImageIndex; - BOOL wasDumpRTF; - - memset(GlobalBuffer,0,GlobalBufferLen); - sprintf_s(GlobalBuffer, GlobalBufferLen,g_fFullMemberInfo ? "method %s : ": "%s : ",pszMethodName); - InGlobalBuffer = (UINT32)strlen(GlobalBuffer); - ulLen = InGlobalBuffer; - wasDumpRTF = g_fDumpRTF; - g_fDumpRTF = FALSE; - mdToken tkVarOwner = g_tkVarOwner; - g_tkVarOwner = cl; - DumpMethod(mbMethod, pszClassName,VAL32(g_CORHeader->EntryPointToken),(void *)g_hwndTreeView,FALSE); - g_tkVarOwner = tkVarOwner; - g_fDumpRTF = wasDumpRTF; - GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n - - szName = &GlobalBuffer[ulLen]; - - if(strstr(szName,"instance ") == szName) strcpy_s(szName,GlobalBufferLen-ulLen,szName+9); - - szName = GlobalBuffer; - - hParent = pClassItem->hItem; - - _ASSERTE(pClassItem->CurMember < pClassItem->SubItems); - - if((strchr(szName, '<'))&&(strchr(szName, '>'))) - { - ulImageIndex = IsMdStatic(dwAttrs) ? STATIC_METHOD_GEN_IMAGE_INDEX : METHOD_GEN_IMAGE_INDEX; - } - else - { - ulImageIndex = IsMdStatic(dwAttrs) ? STATIC_METHOD_IMAGE_INDEX : METHOD_IMAGE_INDEX; - } - - pClassItem->pMembers[pClassItem->CurMember].hItem = AddOneItem( - hParent, szName, TVI_LAST, ulImageIndex, g_hwndTreeView, FALSE - ); - pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER; - pClassItem->pMembers[pClassItem->CurMember].mbMember = mbMethod; - pClassItem->CurMember++; -} - -#ifdef _PREFAST_ -#pragma warning(pop) -#endif -BOOL NamespaceMatch(const char *pszNamespace, __in __nullterminated char *pszString) -{ - if (strncmp(pszNamespace, pszString, strlen(pszNamespace)) == 0) - { - if (pszString[ strlen(pszNamespace) ] == NAMESPACE_SEPARATOR_CHAR) - return TRUE; - } - - return FALSE; -} - -void AddFieldToGUI( - mdTypeDef cl, - ClassItem_t *pClassItem, - const char *pszNamespace, - const char *pszClassName, - const char *pszFieldName, - const char *pszSignature, - mdFieldDef mbField, - DWORD dwAttrs -) -{ - DWORD Dimensions; - ULONG ul1,ul2; - BOOL wasDumpRTF; - HTREEITEM hParent = pClassItem->hItem; - - Dimensions = 0; - - memset(GlobalBuffer,0,GlobalBufferLen); - sprintf_s(GlobalBuffer,GlobalBufferLen,g_fFullMemberInfo ? "field %s : " : "%s : ",pszFieldName); - InGlobalBuffer = (UINT32)strlen(GlobalBuffer); - GetClassLayout(cl,&ul1,&ul2); - wasDumpRTF = g_fDumpRTF; - g_fDumpRTF = FALSE; - DumpField(mbField, pszClassName,(void *)g_hwndTreeView,FALSE); - g_fDumpRTF = wasDumpRTF; - GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n - char* pch = strchr(GlobalBuffer,'\r'); - if(pch) strcpy_s(pch,5," ..."); - _ASSERTE(pClassItem->CurMember < pClassItem->SubItems); - - pClassItem->pMembers[pClassItem->CurMember].mbMember = mbField; - pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER; - pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem( - hParent, - GlobalBuffer, //szType, - TVI_LAST, - (dwAttrs & mdStatic) ? STATIC_FIELD_IMAGE_INDEX : FIELD_IMAGE_INDEX, - g_hwndTreeView, - FALSE - ); -} - -void AddEventToGUI( - mdTypeDef cl, - ClassItem_t *pClassItem, - const char *pszNamespace, - const char *pszClassName, - DWORD dwClassAttrs, - mdEvent mbEvent -) -{ - DWORD Dimensions; - BOOL wasDumpRTF; - HTREEITEM hParent = pClassItem->hItem; - - Dimensions = 0; - - memset(GlobalBuffer,0,GlobalBufferLen); - if(g_fFullMemberInfo) strcpy_s(GlobalBuffer,GlobalBufferLen,"event "); - InGlobalBuffer = (UINT32)strlen(GlobalBuffer); - wasDumpRTF = g_fDumpRTF; - g_fDumpRTF = FALSE; - DumpEvent(mbEvent, pszClassName, dwClassAttrs, (void *)g_hwndTreeView, FALSE); //FALSE=don't dump the body - g_fDumpRTF = wasDumpRTF; - GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n - - _ASSERTE(pClassItem->CurMember < pClassItem->SubItems); - - pClassItem->pMembers[pClassItem->CurMember].mbMember = mbEvent; - pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER; - pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem( - hParent, - GlobalBuffer, //szType, - TVI_LAST, - EVENT_IMAGE_INDEX, - g_hwndTreeView, - FALSE - ); -} - -void AddPropToGUI( - mdTypeDef cl, - ClassItem_t *pClassItem, - const char *pszNamespace, - const char *pszClassName, - DWORD dwClassAttrs, - mdProperty mbProp -) -{ - DWORD Dimensions; - BOOL wasDumpRTF; - HTREEITEM hParent = pClassItem->hItem; - - Dimensions = 0; - - memset(GlobalBuffer,0,GlobalBufferLen); - if(g_fFullMemberInfo) strcpy_s(GlobalBuffer,GlobalBufferLen,"prop "); - InGlobalBuffer = (UINT32)strlen(GlobalBuffer); - wasDumpRTF = g_fDumpRTF; - g_fDumpRTF = FALSE; - DumpProp(mbProp, pszClassName, dwClassAttrs, (void *)g_hwndTreeView, FALSE); //FALSE=don't dump the body - g_fDumpRTF = wasDumpRTF; - GlobalBuffer[InGlobalBuffer-2] = 0; // get rid of \r\n - - _ASSERTE(pClassItem->CurMember < pClassItem->SubItems); - - pClassItem->pMembers[pClassItem->CurMember].mbMember = mbProp; - pClassItem->pMembers[pClassItem->CurMember].Discriminator = TREEITEM_TYPE_MEMBER; - pClassItem->pMembers[pClassItem->CurMember++].hItem = AddOneItem( - hParent, - GlobalBuffer, //szType, - TVI_LAST, - PROP_IMAGE_INDEX, - g_hwndTreeView, - FALSE - ); -} - - - -HTREEITEM FindCreateNamespaceRoot(const char *pszNamespace) -{ - DWORD i; - HTREEITEM hRoot; - DWORD l = 0,ll; - - if (!pszNamespace || !*pszNamespace) - return g_hRoot; // not in a namespace, use tree root - - hRoot = g_hRoot; - for (i = 0; i < g_NumNamespaces; i++) - { - if (!strcmp(pszNamespace, (*g_NamespaceList)[i].pszNamespace)) - return (*g_NamespaceList)[i].hRoot; - } - for (i = 0; i < g_NumNamespaces; i++) - { - if(strstr(pszNamespace,(*g_NamespaceList)[i].pszNamespace) == pszNamespace) - { - ll = (DWORD)strlen((*g_NamespaceList)[i].pszNamespace); - if((ll > l)&&(pszNamespace[ll] == '.')) - { - hRoot = (*g_NamespaceList)[i].hRoot; - l = ll; - } - } - } - - hRoot = AddOneItem(hRoot, pszNamespace, TVI_LAST, NAMESPACE_IMAGE_INDEX, g_hwndTreeView, TRUE); - (*g_NamespaceList)[g_NumNamespaces].pszNamespace = pszNamespace; - (*g_NamespaceList)[g_NumNamespaces].hRoot = hRoot; - g_NumNamespaces++; - - return hRoot; -} - - -Namespace_t *FindNamespace(const char *pszNamespace) -{ - DWORD i; - - for (i = 0; i < g_NumNamespaces; i++) - { - if (!strcmp(pszNamespace, (*g_NamespaceList)[i].pszNamespace)) - return &(*g_NamespaceList)[i]; - } - - return NULL; -} - - -void GUICleanupClassItems() -{ - DWORD i; - WCHAR* sz=L"\0\0"; - - for (i = 0; i < g_NumClassItems; i++) - { - if((*g_ClassItemList)[i].pMembers) - { - delete[] (*g_ClassItemList)[i].pMembers; - (*g_ClassItemList)[i].pMembers = NULL; - } - } - for (i = 0; i < g_NumDisasmBoxes; i++) - { - PostMessageA((*g_DisasmBox)[i].hwndContainer,WM_CLOSE,0,0); - } - WszSendMessage(g_hwndAsmInfo,WM_SETTEXT,0,(LPARAM)sz); - EnableMenuItem(g_hMenu,(UINT)(UINT_PTR)g_hViewMenu, MF_GRAYED); - EnableMenuItem(g_hFileMenu,IDM_DUMP,MF_GRAYED); - EnableMenuItem(g_hFileMenu,IDM_DUMP_TREE,MF_GRAYED); -} - -// -// Add a new class tree node -// -ClassItem_t *AddClassToGUI( - mdTypeDef cl, - UINT uImageIndex, - const char *pszNamespace, - const char *pszClassName, - DWORD cSubItems, - HTREEITEM *phRoot // Returns the namespace root (NOT the class root) -) -{ - HTREEITEM hRoot; - - if(*phRoot) - hRoot = *phRoot; - else - { - hRoot = FindCreateNamespaceRoot(pszNamespace); - _ASSERTE(hRoot != NULL); - - *phRoot = hRoot; - } - - (*g_ClassItemList)[g_NumClassItems].hItem = AddOneItem(hRoot, pszClassName, TVI_LAST, uImageIndex, g_hwndTreeView, FALSE); - (*g_ClassItemList)[g_NumClassItems].cl = cl; - (*g_ClassItemList)[g_NumClassItems].SubItems = cSubItems; - (*g_ClassItemList)[g_NumClassItems].CurMember = 0; - - (*g_ClassItemList)[g_NumClassItems].pMembers = new (nothrow) TreeItem_t[cSubItems]; - - g_NumClassItems++; - - return &(*g_ClassItemList)[g_NumClassItems-1]; -} - - -void AddGlobalFunctions() -{ - HRESULT hr = S_OK; - HENUMInternal hEnumMethod; - mdToken FuncToken; - DWORD i; - HTREEITEM hNamespaceRoot = NULL; - DWORD NumGlobals; - - ClassItem_t* pClassItem = &(*g_ClassItemList)[0]; - - if (SUCCEEDED(g_pImport->EnumGlobalFieldsInit(&hEnumMethod))) - { - NumGlobals = g_pImport->EnumGetCount(&hEnumMethod); - MemberInfo* fields = new (nothrow) MemberInfo[NumGlobals]; - MemberInfo* curField = fields; - - for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++) - { - curField->token = FuncToken; - if (FAILED(g_pImport->GetFieldDefProps(FuncToken, &curField->dwAttrs)) || - FAILED(g_pImport->GetNameOfFieldDef(FuncToken, &curField->pszMemberName))) - { - curField->pszMemberName = "Invalid FieldDef record"; - } - MAKE_NAME_IF_NONE(curField->pszMemberName,FuncToken); - //curField->pComSig = g_pImport->GetSigOfFieldDef(FuncToken, &curMethod->cComSig); - curField++; - } - g_pImport->EnumClose(&hEnumMethod); - - _ASSERTE(curField - fields == (int) NumGlobals); - - if(g_fSortByName) qsort(fields, NumGlobals, sizeof MemberInfo, memberCmp); - - for(curField = fields; curField < &fields[NumGlobals];curField++) - { - if(g_fLimitedVisibility) - { - if(g_fHidePub && IsFdPublic(curField->dwAttrs)) continue; - if(g_fHidePriv && IsFdPrivate(curField->dwAttrs)) continue; - if(g_fHideFam && IsFdFamily(curField->dwAttrs)) continue; - if(g_fHideAsm && IsFdAssembly(curField->dwAttrs)) continue; - if(g_fHideFOA && IsFdFamORAssem(curField->dwAttrs)) continue; - if(g_fHideFAA && IsFdFamANDAssem(curField->dwAttrs)) continue; - if(g_fHidePrivScope && IsFdPrivateScope(curField->dwAttrs)) continue; - } - AddFieldToGUI(NULL, pClassItem, NULL, "Global Fields", curField->pszMemberName, NULL, curField->token, curField->dwAttrs); - } - delete[] fields; - } - if (FAILED(g_pImport->EnumGlobalFunctionsInit(&hEnumMethod))) - return; - - NumGlobals = g_pImport->EnumGetCount(&hEnumMethod); - MemberInfo* methods = new (nothrow) MemberInfo[NumGlobals]; - MemberInfo* curMethod = methods; - - for (i = 0; g_pImport->EnumNext(&hEnumMethod, &FuncToken); i++) - { - curMethod->token = FuncToken; - if (FAILED(g_pImport->GetMethodDefProps(FuncToken, &curMethod->dwAttrs)) || - FAILED(g_pImport->GetNameOfMethodDef(FuncToken, &curMethod->pszMemberName))) - { - curMethod->pszMemberName = "Invalid MethodDef record"; - } - MAKE_NAME_IF_NONE(curMethod->pszMemberName,FuncToken); - if (FAILED(g_pImport->GetSigOfMethodDef(FuncToken, &curMethod->cComSig, &curMethod->pComSig))) - { - curMethod->pszMemberName = "Invalid MethodDef record"; - curMethod->cComSig = 0; - curMethod->pComSig = NULL; - } - curMethod++; - } - g_pImport->EnumClose(&hEnumMethod); - - _ASSERTE(curMethod - methods == (int) NumGlobals); - - if(g_fSortByName) qsort(methods, NumGlobals, sizeof MemberInfo, memberCmp); - - for(curMethod = methods; curMethod < &methods[NumGlobals];curMethod++) - { - if(g_fLimitedVisibility) - { - if(g_fHidePub && IsMdPublic(curMethod->dwAttrs)) continue; - if(g_fHidePriv && IsMdPrivate(curMethod->dwAttrs)) continue; - if(g_fHideFam && IsMdFamily(curMethod->dwAttrs)) continue; - if(g_fHideAsm && IsMdAssem(curMethod->dwAttrs)) continue; - if(g_fHideFOA && IsMdFamORAssem(curMethod->dwAttrs)) continue; - if(g_fHideFAA && IsMdFamANDAssem(curMethod->dwAttrs)) continue; - if(g_fHidePrivScope && IsMdPrivateScope(curMethod->dwAttrs)) continue; - } - AddMethodToGUI(NULL, pClassItem, NULL, "Global Functions", curMethod->pszMemberName, curMethod->pComSig, curMethod->cComSig, curMethod->token, curMethod->dwAttrs); - } - delete[] methods; - return; -} - - -BOOL CreateMainWindow() -{ - DWORD dwStyle, dwStyleEx; - -// If only showing GUI's IL window, than we don't want to see the main window -// However, main window still manages our data, so we have to still create it. :( -// But we can "pretend" it's not there by hiding it (no WS_VISIBLE, and add WS_EX_TOOLWINDOW) - if (IsGuiILOnly()) { - dwStyle = WS_OVERLAPPEDWINDOW | WS_CAPTION | WS_POPUP | WS_SIZEBOX; - dwStyleEx = WS_EX_TOOLWINDOW; - } else { - dwStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CAPTION | WS_POPUP | WS_SIZEBOX; - dwStyleEx = WS_EX_CLIENTEDGE; - } - g_hwndMain = WszCreateWindowEx(dwStyleEx, - MAIN_WINDOW_CLASSW, - L"IL DASM ", //MAIN_WINDOW_CAPTIONW, - dwStyle, - guiInfo.x, - guiInfo.y, - guiInfo.w, - guiInfo.h, - NULL, - g_hMenu, // menu - g_hInstance, // hinst - NULL - ); - if (g_hwndMain == NULL) - return FALSE; - DragAcceptFiles(g_hwndMain,TRUE); - SendMessageA(g_hwndMain,WM_SETTEXT, 0, (LPARAM)"IL DASM "); - return TRUE; -} - - -// -// Given a CL token, find the classitem for it -// -ClassItem_t *FindClassItem(mdTypeDef cl) -{ - DWORD i; - - for (i = 0; i < g_NumClassItems; i++) - { - if ((*g_ClassItemList)[i].cl == cl) - return &(*g_ClassItemList)[i]; - } - - return NULL; -} - - -// -// Given a class name, find the classitem for it (may fail) -// -ClassItem_t *FindClassItem(__in_opt __nullterminated char *pszFindNamespace, __in __nullterminated char *pszFindName) -{ - DWORD i; - - for (i = 0; i < g_NumClassItems; i++) - { - const char *pszClassName; - const char *pszNamespace; - - if((*g_ClassItemList)[i].cl) - { - - if (FAILED(g_pImport->GetNameOfTypeDef( - (*g_ClassItemList)[i].cl, - &pszClassName, - &pszNamespace))) - { - pszClassName = pszNamespace = "Invalid TypeDef record"; - } - MAKE_NAME_IF_NONE(pszClassName,(*g_ClassItemList)[i].cl); - - if (!strcmp(pszFindName, pszClassName)) - { - if ((((pszFindNamespace == NULL)||(*pszFindNamespace == 0)) - &&((pszNamespace == NULL)||(*pszNamespace == 0))) - ||(!strcmp(pszFindNamespace, pszNamespace))) - return &(*g_ClassItemList)[i]; - } - } - } - //MessageBox(NULL,pszFindName,"Class Not Found",MB_OK); - return NULL; -} - - -ClassItem_t *FindClassItem(HTREEITEM hItem) -{ - DWORD i; - - for (i = 0; i < g_NumClassItems; i++) - { - if ((*g_ClassItemList)[i].hItem == hItem) - return &(*g_ClassItemList)[i]; - } - - return NULL; -} - - -// -// Init GUI components -// -BOOL CreateGUI() -{ - - if (InitGUI() == FALSE) - return FALSE; - - // Register the window class for the main window. - if (CreateMainWindow() == FALSE) - return FALSE; - - g_hwndTreeView = CreateTreeView(g_hwndMain); - if (g_hwndTreeView == NULL) - return FALSE; - - return 0; -} - - -// -// This is the main loop which the disassembler sits in when in GUI mode -// -void GUIMainLoop() -{ - MSG msg; - HACCEL hAccel = NULL; - - _ASSERTE(g_hResources != NULL); - hAccel = WszLoadAccelerators(g_hResources,L"FileAccel"); - // Accelerator tables are released when the app exits - while (WszGetMessage(&msg, (HWND) NULL, 0, 0)) - { - // Dispatch message to appropriate window - if((g_hFindText == NULL)|| !WszIsDialogMessage(g_hFindText,&msg)) - { - if(hAccel && WszTranslateAccelerator(g_hwndMain,hAccel,&msg)); - else - { - TranslateMessage(&msg); - WszDispatchMessage(&msg); - } - } - } - GUICleanupClassItems(); -} -// Dump one tree item to a text file (calls itself recursively) -void DumpTreeItem(HTREEITEM hSelf, FILE* pFile, __inout __nullterminated WCHAR* szIndent) -{ - HTREEITEM hNext; - TVITEMEXW tvi; - static WCHAR szText[2048]; - WCHAR* wzString = (WCHAR*)GlobalBuffer; - tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_TEXT; - tvi.hItem = hSelf; - tvi.pszText = szText; - tvi.cchTextMax = 2047; - if(WszSendMessage(g_hwndTreeView,TVM_GETITEMW,0,(LPARAM)(&tvi))) - { - WCHAR* szType = NULL; - if(hSelf == g_hRoot) szType = L"MOD"; - else - { - switch(tvi.iImage) - { - case CLASS_IMAGE_INDEX: szType = L"CLS"; break; - case EVENT_IMAGE_INDEX: szType = L"EVT"; break; - case FIELD_IMAGE_INDEX: szType = L"FLD"; break; - case NAMESPACE_IMAGE_INDEX: szType = L"NSP"; break; - case METHOD_IMAGE_INDEX: szType = L"MET"; break; - case PROP_IMAGE_INDEX: szType = L"PTY"; break; - case STATIC_FIELD_IMAGE_INDEX: szType = L"STF"; break; - case STATIC_METHOD_IMAGE_INDEX: szType = L"STM"; break; - case CLASSENUM_IMAGE_INDEX: szType = L"ENU"; break; - case CLASSINT_IMAGE_INDEX: szType = L"INT"; break; - case CLASSVAL_IMAGE_INDEX: szType = L"VCL"; break; - } - } - if(szType) swprintf_s(wzString,4096,L"%s___[%s] %s",szIndent,szType,szText); - else swprintf_s(wzString,4096,L"%s %s",szIndent,szText); - } - else swprintf_s(wzString,4096,L"%sGetItemW failed",szIndent); - printLineW(pFile,wzString); - *wzString = 0; - if(hNext = TreeView_GetChild(g_hwndTreeView,hSelf)) - { - wcscat_s(szIndent,MAX_FILENAME_LENGTH,L" |"); - - do { - DumpTreeItem(hNext,pFile,szIndent); - } while(hNext = TreeView_GetNextSibling(g_hwndTreeView,hNext)); - - szIndent[wcslen(szIndent)-4] = 0; - printLineW(pFile,szIndent); - } -} -#endif diff --git a/src/ildasm/gui.h b/src/ildasm/gui.h deleted file mode 100644 index 71a581b3e0..0000000000 --- a/src/ildasm/gui.h +++ /dev/null @@ -1,155 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#include "dynamicarray.h" - -#define BITMAP_WIDTH 15 -#define BITMAP_HEIGHT 15 - -#define DISASSEMBLY_CLASS_NAME "disassembly" -#define MAIN_WINDOW_CLASS "dasm" -#define MAIN_WINDOW_CAPTION "IL DASM" - -#define DISASSEMBLY_CLASS_NAMEW L"disassembly" -#define MAIN_WINDOW_CLASSW L"dasm" -#define MAIN_WINDOW_CAPTIONW L"IL DASM\0" - -#define PHDC (pDIS->hDC) -#define PRC (pDIS->rcItem) - -#define PADDING 28 - -#define ID_TREEVIEW 1 -#define ID_LISTBOX 2 - -typedef struct -{ - const char *pszNamespace; - HTREEITEM hRoot; -} Namespace_t; - - -// -// Menu info -// -enum -{ - IDM_PROGRESS, - IDM_OPEN, - IDM_DUMP, - IDM_DUMP_TREE, - IDM_EXIT, - IDM_SORT_BY_NAME, - IDM_SHOW_PUB, - IDM_SHOW_PRIV, - IDM_SHOW_FAM, - IDM_SHOW_ASM, - IDM_SHOW_FAA, - IDM_SHOW_FOA, - IDM_SHOW_PSCOPE, - IDM_FULL_INFO, - IDM_BYTES, - IDM_TOKENS, - IDM_SOURCELINES, - IDM_EXPANDTRY, - IDM_QUOTEALLNAMES, - IDM_SHOW_HEADER, - IDM_SHOW_STAT, - IDM_SHOW_METAINFO, - IDM_MI_DEBUG, - IDM_MI_HEADER, - IDM_MI_HEX, - IDM_MI_CSV, - IDM_MI_UNREX, - IDM_MI_SCHEMA, - IDM_MI_RAW, - IDM_MI_HEAPS, - IDM_MI_VALIDATE, - IDM_HELP, - IDM_ABOUT, - IDM_FONT_TREE, - IDM_FONT_DASM, - IDM_FIND, - IDM_FINDNEXT, - IDM_TREEVIEWFCN, - IDM_CAVERBAL, - IDM_DUMPRTF -}; - - -// -// Bitmaps - keep in same order as in dasm.rc file -// -enum -{ - CLASS_IMAGE_INDEX, - EVENT_IMAGE_INDEX, - METHOD_IMAGE_INDEX, - NAMESPACE_IMAGE_INDEX, - FIELD_IMAGE_INDEX, - PROP_IMAGE_INDEX, - STATIC_METHOD_IMAGE_INDEX, - STATIC_FIELD_IMAGE_INDEX, - RED_ARROW_IMAGE_INDEX, - CLASSENUM_IMAGE_INDEX, - CLASSINT_IMAGE_INDEX, - CLASSVAL_IMAGE_INDEX, - CLASS_GEN_IMAGE_INDEX, - METHOD_GEN_IMAGE_INDEX, - STATIC_METHOD_GEN_IMAGE_INDEX, - CLASSENUM_GEN_IMAGE_INDEX, - CLASSINT_GEN_IMAGE_INDEX, - CLASSVAL_GEN_IMAGE_INDEX, - LAST_IMAGE_INDEX -}; - -#define TREEITEM_TYPE_MEMBER 1 -#define TREEITEM_TYPE_INFO 2 - -// Member items and info items (under classes) -typedef struct -{ - HTREEITEM hItem; - union - { - mdToken mbMember; - char * pszText; // if an info item (extends or implements some class) - }; - BYTE Discriminator; -} TreeItem_t; - -// Class items (under the root) -typedef struct -{ - HTREEITEM hItem; - mdTypeDef cl; - TreeItem_t *pMembers; // List of subitems - DWORD SubItems; // Number of subitems - DWORD CurMember; // Used when building member list -} ClassItem_t; - -typedef struct -{ - HWND hwndContainer; - HWND hwndChild; - HMENU hMenu; - mdToken tkClass; - mdToken tkMember; - WCHAR wzFind[120]; - FINDREPLACEW strFR; -} DisasmBox_t; - - - -// For accessing metadata -extern IMDInternalImport* g_pImport; -extern PELoader * g_pPELoader; -extern IMetaDataImport2* g_pPubImport; - -//extern DynamicArray<mdToken> g_cl_list; -extern mdToken * g_cl_list; -//extern DynamicArray<mdToken> g_cl_enclosing; -extern mdToken * g_cl_enclosing; -extern mdTypeDef g_cl_module; -extern DWORD g_NumClasses; diff --git a/src/ildasm/html/clicking.htm b/src/ildasm/html/clicking.htm deleted file mode 100644 index 828193c988..0000000000 --- a/src/ildasm/html/clicking.htm +++ /dev/null @@ -1,35 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<HTML> -<HEAD> -<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -<TITLE>Clicking on Tree View Items</TITLE> - -<STYLE> - BODY {background: white; color: black} - h3 {font: 8pt Arial bold} - P {font: 10pt Arial} - TD {font: 10pt Arial} - A {text-decoration: none; color: blue} -</STYLE> - -</HEAD> - -<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> - -<P style="margin-top: 0; margin-bottom: 0"><A NAME="clicking"><font size="4"> -</font></A><B><I><font size="4">CLICKING ON TREE VIEW ITEMS</font></I></B></P> -<P style="margin-top: 0; margin-bottom: 0"> </P> - -<font size="2"> -<P style="margin-top: 0; margin-bottom: 0">Double-clicking on various tree view items results in the following actions: -<UL> - <LI><P style="margin-top: 0; margin-bottom: 0">On namespace or any type of class - expanding/collapsing respective subtree</LI> - <LI><p style="margin-top: 0; margin-bottom: 0">On manifest, field, method, event, property - showing disassembly of the item in a separate window</LI> - <LI><p style="margin-top: 0; margin-bottom: 0">On <B>.class</B> info item - showing partial disassembly of the class in a separate window</LI> - <LI><p style="margin-top: 0; margin-bottom: 0">On <B>extends</B> info item - selecting the parent class (if present) in tree view</LI> - <LI><p style="margin-top: 0; margin-bottom: 0">On <B>implements</B> info item - selecting the implemented interface (if present) in tree view</LI> -</UL> -</font> - -</BODY> -</HTML> diff --git a/src/ildasm/html/keyboard.htm b/src/ildasm/html/keyboard.htm deleted file mode 100644 index 6730adcc22..0000000000 --- a/src/ildasm/html/keyboard.htm +++ /dev/null @@ -1,166 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<HTML> -<HEAD> -<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -<TITLE>Keyboard Commands</TITLE> - -<STYLE> - BODY {background: white; color: black} - h3 {font: 8pt Arial bold} - P {font: 10pt Arial} - TD {font: 10pt Arial} - A {text-decoration: none; color: blue} -</STYLE> - -</HEAD> - -<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> -<font face="Arial"> -<H1 style="margin-top: 0; margin-bottom: 0"><A NAME="keyboard"><font size="4"> -</font></A><I><font size="4">KEYBOARD COMMANDS</font></I></H1> -<p style="margin-top: 0; margin-bottom: 0"> </p> - -<font size="2"> - -<P style="margin-top: 0; margin-bottom: 0">Hot keys: </P> -<blockquote> - <table border="1" width="90%" id="table1"> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <B>Ctrl+O</B></font></td> - <td> - -<font size="2" face="Arial"> - - open a file</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <B>Ctrl+D</B> -</font> - </td> - <td> - -<font size="2" face="Arial"> - - disassemble the loaded file into IL source file</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <B>Ctrl+T</B></font></td> - <td> - -<font size="2" face="Arial"> - - dump fully expanded tree view into a text file</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <B>Ctrl+M</B></font></td> - <td> - -<font size="2" face="Arial"> - - show metadata info in a disassembly window (advanced mode only)</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <B>Ctrl+X</B></font></td> - <td> - -<font size="2" face="Arial"> - - exit</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <B>F1</B> or - <B>Alt+H</B></font></td> - <td> - -<font size="2" face="Arial"> - - Show this help window</font></td> - </tr> - </table> -</blockquote> -<P style="margin-top: 0; margin-bottom: 0"> </P> - -<p style="margin-top: 0; margin-bottom: 0"></p> - -<P style="margin-top: 0; margin-bottom: 0">In tree view:</P> - -<blockquote> - <table border="1" width="90%" id="table2"> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <b>Enter</b></font></td> - <td> - -<font size="2" face="Arial"> - - similar to double clicking (see above)</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <b>Cursor right</b></font></td> - <td> - -<font size="2" face="Arial"> - - expand subtree</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <b>Cursor left</b></font></td> - <td> - -<font size="2" face="Arial"> - - collapse subtree</font></td> - </tr> - <tr> - <td width="123"> - -<font size="2" face="Arial"> - - <b>Cursor up/down</b></font></td> - <td> - -<font size="2" face="Arial"> - - select previous/next item</font></td> - </tr> - </table> -</blockquote> -</font> -</font> -</BODY> -</HTML> diff --git a/src/ildasm/html/menu_options.htm b/src/ildasm/html/menu_options.htm deleted file mode 100644 index d96f59acfa..0000000000 --- a/src/ildasm/html/menu_options.htm +++ /dev/null @@ -1,324 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<HTML> -<HEAD> -<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -<TITLE>Menu Options</TITLE> - -<STYLE> - BODY {background: white; color: black} - h3 {font: 8pt Arial bold} - P {font: 10pt Arial} - blockquote {text-indent: 0%} - TD {font: 10pt Arial} - A {text-decoration: none; color: blue} -</STYLE> - -</HEAD> - -<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> -<font face="Arial"> -<P style="margin-top: 0; margin-bottom: 0"><A NAME="menu_options"></A><B><I><font size="4">MENU OPTIONS</font></I></B></P> - -<P style="margin-top: 0; margin-bottom: 0"> </P> -<P style="margin-top: 0; margin-bottom: 0"><B>File</B> (Alt+F)</P> -<font size="2"> -<blockquote> - <table border="1" width="90%" id="table1"> - <tr> - <td width="155" valign="top"> -<font size="2" face="Arial"> - <B>Open</B> (Ctrl+O)</font></td> - <td> -<font size="2" face="Arial"> - select a PE file to open</font></td> - </tr> - <tr> - <td width="155" valign="top"> -<font size="2" face="Arial"> - <B>Dump</B> (Ctrl+D)</font></td> - <td> -<font size="2" face="Arial"> - dump the current PE file to an IL source file</font></td> - </tr> - <tr> - <td width="155" valign="top"> -<font size="2" face="Arial"> - <B>Dump TreeView</B> (Ctrl+T)</font></td> - <td> -<font size="2" face="Arial"> - dump the fully expanded tree view of current PE file to a text file</font></td> - </tr> - <tr> - <td width="155" valign="top"> -<font size="2" face="Arial"> - <B>Exit</B> (Ctrl+X)</font></td> - <td> -<font size="2" face="Arial"> - close the current PE file and exit</font></td> - </tr> - </table> -</blockquote> -</font> -<p style="margin-top: 0; margin-bottom: 0"> -</P> - -<P style="margin-top: 0; margin-bottom: 0"> </P> -<P style="margin-top: 0; margin-bottom: 0"><B>View</B> (Alt+V)</P> - -<font size="2"> -<blockquote> - <table border="1" width="90%" id="table2"> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Set Fonts</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - set the fonts for tree view and disassembly windows. Default fonts - are MS Sans Serif 8 for tree view and Courier 10 for Disassembly - windows</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Sort by name</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) sort the items in tree view by name</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show Public</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having public accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show Private</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having private accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show Family</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having family accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show Assembly</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having assembly accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show FamANDAssem</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having family-and-assembly - accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show FamORAssem</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having family-or-assembly - accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show PrivateScope</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show or dump the items having private scope accessibility</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show Member Types</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show types of members ('method','field',etc.) in tree view nodes</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show bytes</B> -</font> - </td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show the actual IL code in hexadecimal (as comments) when - disassembling the methods</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show token values</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show token values in hexadecimal (as comments)</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Show source lines</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) show the original source code (as comments, if the original - source is available)</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Quote all names</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) include all names in single quotes (when off, only illegal - names are quoted)</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Expand try/catch</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - (on/off) present SEH clauses in expanded form when possible (<B>try { ... } catch ExceptionClass { ... }</B>)</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>COR Header</B></font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - show contents of COR header in a disassembly window"</font></td> - </tr> - <tr> - <td width="155" valign="top"> - -<font size="2" face="Arial"> - <B>Statistics</B> <br> - (advanced mode only)</font></td> - <td colspan="2" valign="top"> - -<font size="2" face="Arial"> - show PE file statistics in a disassembly window</font></td> - </tr> - <tr> - <td width="155" rowspan="6" valign="top"> - -<font size="2" face="Arial"> - <B>MetaInfo</B> <br> - (advanced mode only)</font></td> - <td width="16%" valign="top"> - -<font size="2" face="Arial"> - <B>Header</B> -</font> - </td> - <td valign="top"> - -<font size="2" face="Arial"> - (on/off) show metadata info as header summary</font></td> - </tr> - <tr> - <td width="16%" valign="top"> - -<font size="2" face="Arial"> - <B>More HEX</B></font></td> - <td valign="top"> - -<font size="2" face="Arial"> - (on/off) show token and attribute values (in hexadecimal) in - metadata info</font></td> - </tr> - <tr> - <td width="16%" valign="top"> - -<font size="2" face="Arial"> - <B>CSV</B></font></td> - <td valign="top"> - -<font size="2" face="Arial"> - (on/off) show metadata info as comma-separated values</font></td> - </tr> - <tr> - <td width="16%" valign="top"> - -<font size="2" face="Arial"> - <B>Unresolved ext</B></font></td> - <td valign="top"> - -<font size="2" face="Arial"> - (on/off) add list of unresolved external references to metadata info</font></td> - </tr> - <tr> - <td width="16%" valign="top"> - -<font size="2" face="Arial"> - <B>Validate</B></font></td> - <td valign="top"> - -<font size="2" face="Arial"> - (on/off) show metadata validation results</font></td> - </tr> - <tr> - <td width="16%" valign="top"> - -<font size="2" face="Arial"> - <B>Show!</B> (Ctrl+M)</font></td> - <td valign="top"> - -<font size="2" face="Arial"> - show the metadata info in a disassembly window</font></td> - </tr> - </table> -</blockquote> -</font> -</font> -</BODY> -</HTML>
\ No newline at end of file diff --git a/src/ildasm/html/tree_view_icons.htm b/src/ildasm/html/tree_view_icons.htm deleted file mode 100644 index d39e7e811d..0000000000 --- a/src/ildasm/html/tree_view_icons.htm +++ /dev/null @@ -1,102 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<HTML> -<HEAD> -<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252"> -<TITLE>Tree View Icons</TITLE> - -<STYLE> - BODY {background: white; color: black} - h3 {font: 8pt Arial bold} - P {font: 10pt Arial} - TD {font: 10pt Arial} - A {text-decoration: none; color: blue} -</STYLE> - -</HEAD> - -<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> -<font face="Arial"> - -<H1 style="margin-top: 0; margin-bottom: 0"><A NAME="tree_view_icons"> -</A><I><font size="4">TREE VIEW ICONS</font></I></H1> -<p style="margin-top: 0; margin-bottom: 0"> </p> - -<table border="1" width="82%" id="table1" cellpadding="3" cellspacing="3" > -<font size="2"> - <tr> - <td width="148" valign="top"><b>Namespace</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/namespace.gif" width="15" height="15"></td> - <td width="321" valign="top">(Blue shield)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Class</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/class.gif" width="15" height="15"></td> - <td width="321" valign="top">(Blue rectangle with three outputs)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Interface</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/interface.gif" width="15" height="15"></td> - <td width="321" valign="top">(Blue rectangle with three outputs marked 'I')</td> - </tr> - <tr> - <td width="148" valign="top"><b>Value Class</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/value_class.gif" width="15" height="15"></td> - <td width="321" valign="top">(Brown rectangle with three outputs)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Enum</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/enum.gif" width="15" height="15"></td> - <td width="321" valign="top">(Brown rectangle with three outputs marked 'E')</td> - </tr> - <tr> - <td width="148" valign="top"><b>Method</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/method.gif" width="15" height="15"></td> - <td width="321" valign="top">(Magenta rectangle)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Static method</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/static_method.gif" width="15" height="15"></td> - <td width="321" valign="top">(Magenta rectangle marked 'S')</td> - </tr> - <tr> - <td width="148" valign="top"><b>Field</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/field.gif" width="15" height="15"></td> - <td width="321" valign="top">(Cyan diamond)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Static field</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/static_field.gif" width="15" height="15"></td> - <td width="321" valign="top">(Cyan diamond marked 'S')</td> - </tr> - <tr> - <td width="148" valign="top"><b>Event</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/event.gif" width="15" height="15"></td> - <td width="321" valign="top">(Green point-down triangle)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Property</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/property.gif" width="15" height="15"></td> - <td width="321" valign="top">(Red point-up triangle)</td> - </tr> - <tr> - <td width="148" valign="top"><b>Manifest or a class info item</b></td> - <td align="center" valign="top"> - <img border="0" src="tree_view_icons_files/manifest_classinfo.GIF" width="15" height="15"></td> - <td width="321" valign="top">(Red point-right triangle)</td> - </tr> -</font></table> - -</font> -</BODY> -</HTML>
\ No newline at end of file diff --git a/src/ildasm/html/tree_view_icons_files/class.gif b/src/ildasm/html/tree_view_icons_files/class.gif Binary files differdeleted file mode 100644 index 53d1494a33..0000000000 --- a/src/ildasm/html/tree_view_icons_files/class.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/enum.gif b/src/ildasm/html/tree_view_icons_files/enum.gif Binary files differdeleted file mode 100644 index af7a94ee0b..0000000000 --- a/src/ildasm/html/tree_view_icons_files/enum.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/event.gif b/src/ildasm/html/tree_view_icons_files/event.gif Binary files differdeleted file mode 100644 index 00de688ab8..0000000000 --- a/src/ildasm/html/tree_view_icons_files/event.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/field.gif b/src/ildasm/html/tree_view_icons_files/field.gif Binary files differdeleted file mode 100644 index 0b6ed0a74b..0000000000 --- a/src/ildasm/html/tree_view_icons_files/field.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/interface.gif b/src/ildasm/html/tree_view_icons_files/interface.gif Binary files differdeleted file mode 100644 index 21664cc715..0000000000 --- a/src/ildasm/html/tree_view_icons_files/interface.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF Binary files differdeleted file mode 100644 index 8811686023..0000000000 --- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.GIF +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg Binary files differdeleted file mode 100644 index 8a752429eb..0000000000 --- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.jpg +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png b/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png Binary files differdeleted file mode 100644 index a68d41dd02..0000000000 --- a/src/ildasm/html/tree_view_icons_files/manifest_classinfo.png +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/method.gif b/src/ildasm/html/tree_view_icons_files/method.gif Binary files differdeleted file mode 100644 index d96cfe4e0b..0000000000 --- a/src/ildasm/html/tree_view_icons_files/method.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/namespace.gif b/src/ildasm/html/tree_view_icons_files/namespace.gif Binary files differdeleted file mode 100644 index 4001293dc0..0000000000 --- a/src/ildasm/html/tree_view_icons_files/namespace.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/property.gif b/src/ildasm/html/tree_view_icons_files/property.gif Binary files differdeleted file mode 100644 index 08edbf854c..0000000000 --- a/src/ildasm/html/tree_view_icons_files/property.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/static_field.gif b/src/ildasm/html/tree_view_icons_files/static_field.gif Binary files differdeleted file mode 100644 index d8d6ff3ca3..0000000000 --- a/src/ildasm/html/tree_view_icons_files/static_field.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/static_method.gif b/src/ildasm/html/tree_view_icons_files/static_method.gif Binary files differdeleted file mode 100644 index 5d982e1fc8..0000000000 --- a/src/ildasm/html/tree_view_icons_files/static_method.gif +++ /dev/null diff --git a/src/ildasm/html/tree_view_icons_files/value_class.gif b/src/ildasm/html/tree_view_icons_files/value_class.gif Binary files differdeleted file mode 100644 index d4546f510f..0000000000 --- a/src/ildasm/html/tree_view_icons_files/value_class.gif +++ /dev/null diff --git a/src/ildasm/ildasm.chm b/src/ildasm/ildasm.chm Binary files differdeleted file mode 100644 index 166b1ca936..0000000000 --- a/src/ildasm/ildasm.chm +++ /dev/null diff --git a/src/ildasm/ildasm.hhp b/src/ildasm/ildasm.hhp deleted file mode 100644 index 71d47f5ff7..0000000000 --- a/src/ildasm/ildasm.hhp +++ /dev/null @@ -1,36 +0,0 @@ -[OPTIONS] -Binary Index=No -Compatibility=1.1 or later -Compiled file=ildasm.chm -Contents file=dasmhlp.hhc -Default Font=Arial,8,0 -Default Window=Main -Default topic=html\menu_options.htm -Display compile progress=No -Full-text search=Yes -Language=0x409 English (United States) -Title=MSIL Disassembler Help - -[WINDOWS] -Main="MSIL Disassembler Help","dasmhlp.hhc",,"html\menu_options.htm","html\menu_options.htm",,,,,0x42520,185,0x3006,[253,102,1070,702],,0x8,,,,,0 - - -[FILES] -html\clicking.htm -html\keyboard.htm -html\menu_options.htm -html\tree_view_icons.htm -ildasm.hhp -map.h - -[ALIAS] -CLICKING=html\clicking.htm -KEYBOARD=html\keyboard.htm -MENU_OPTIONS=html\menu_options.htm -TREE_VIEW_ICONS=html\tree_view_icons.htm - -[MAP] -#include map.h - -[INFOTYPES] - diff --git a/src/ildasm/map.h b/src/ildasm/map.h deleted file mode 100644 index 5f0cfec93c..0000000000 --- a/src/ildasm/map.h +++ /dev/null @@ -1,8 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -#define MENU_OPTIONS 1 -#define TREE_VIEW_ICONS 2 -#define CLICKING 3 -#define KEYBOARD 4 diff --git a/src/ildasm/method.bmp b/src/ildasm/method.bmp Binary files differdeleted file mode 100644 index b76bb93ef7..0000000000 --- a/src/ildasm/method.bmp +++ /dev/null diff --git a/src/ildasm/methodg.bmp b/src/ildasm/methodg.bmp Binary files differdeleted file mode 100644 index dfa4c68c10..0000000000 --- a/src/ildasm/methodg.bmp +++ /dev/null diff --git a/src/ildasm/namespace.bmp b/src/ildasm/namespace.bmp Binary files differdeleted file mode 100644 index 6ac839ee65..0000000000 --- a/src/ildasm/namespace.bmp +++ /dev/null diff --git a/src/ildasm/prop.bmp b/src/ildasm/prop.bmp Binary files differdeleted file mode 100644 index 857e69c3fe..0000000000 --- a/src/ildasm/prop.bmp +++ /dev/null diff --git a/src/ildasm/rcdll/CMakeLists.txt b/src/ildasm/rcdll/CMakeLists.txt index 5fb49daedc..316f778769 100644 --- a/src/ildasm/rcdll/CMakeLists.txt +++ b/src/ildasm/rcdll/CMakeLists.txt @@ -24,4 +24,4 @@ target_link_libraries(ildasmrc ${STATIC_MT_VCRT_LIB} ) -install_clr (ildasmrc)
\ No newline at end of file +install_clr (ildasmrc) diff --git a/src/ildasm/rcdll/ildasmrc.nativeproj b/src/ildasm/rcdll/ildasmrc.nativeproj deleted file mode 100644 index 9fae17ca1f..0000000000 --- a/src/ildasm/rcdll/ildasmrc.nativeproj +++ /dev/null @@ -1,19 +0,0 @@ -<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="dogfood"> - <!--Import the settings--> - <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" /> - <!--Leaf project Properties--> - <PropertyGroup> - <IsDesktopTool>true</IsDesktopTool> - <OutputName>ildasmrc</OutputName> - <TargetType>DYNLINK</TargetType> - <LinkSubsystem>windows</LinkSubsystem> - <RCAdditionalOptions>$(RCAdditionalOptions) -r</RCAdditionalOptions> - <LinkResourceOnlyDll>true</LinkResourceOnlyDll> - </PropertyGroup> - <!--Leaf Project Items--> - <ItemGroup> - <RCResourceFile Include="..\dasm.rc" /> - </ItemGroup> - <!--Import the targets--> - <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.targets" /> -</Project> diff --git a/src/ildasm/redarrow.bmp b/src/ildasm/redarrow.bmp Binary files differdeleted file mode 100644 index ce94dc8fb2..0000000000 --- a/src/ildasm/redarrow.bmp +++ /dev/null diff --git a/src/ildasm/resource.h b/src/ildasm/resource.h index ae126fafb4..6d7d1e8c40 100644 --- a/src/ildasm/resource.h +++ b/src/ildasm/resource.h @@ -7,63 +7,7 @@ // Used by dasm.rc // -#define IDS_FILE 1 -#define IDS_VIEW 2 -#define IDS_HELP 3 -#define IDS_OPEN 4 -#define IDS_DUMP 5 -#define IDS_DUMPTREE 6 -#define IDS_EXIT 7 -#define IDS_FONTS 8 -#define IDS_FONT_TREE 9 -#define IDS_FONT_DASM 10 -#define IDS_SORT_BY_NAME 11 -#define IDS_SHOW_PUB 12 -#define IDS_SHOW_PRIV 13 -#define IDS_SHOW_FAM 14 -#define IDS_SHOW_ASM 15 -#define IDS_SHOW_FAA 16 -#define IDS_SHOW_FOA 17 -#define IDS_SHOW_PSCOPE 18 -#define IDS_FULL_INFO 19 -#define IDS_BYTES 20 -#define IDS_TOKENS 21 -#define IDS_SOURCELINES 22 -#define IDS_QUOTEALLNAMES 23 -#define IDS_EXPANDTRY 24 -#define IDS_SHOW_HEADER 25 -#define IDS_SHOW_STAT 26 -#define IDS_METAINFO 27 -#define IDS_MI_HEADER 28 -#define IDS_MI_HEX 29 -#define IDS_MI_CSV 30 -#define IDS_MI_UNREX 31 -#define IDS_MI_DEBUG 32 -#define IDS_MI_SCHEMA 33 -#define IDS_MI_RAW 34 -#define IDS_MI_HEAPS 35 -#define IDS_MI_VALIDATE 36 -#define IDS_SHOW_METAINFO 37 -#define IDS_ABOUT 38 -#define IDS_ABOUT_COPYRIGHTINFO 39 -#define IDS_PRODUCTNAME 40 -#define IDS_MAINWINDOWCAPTION 41 -#define IDS_MAINWINDOWCAPTIONAPPEND 42 -#define IDS_NETHEADER 43 -#define IDS_STATISTICS 44 -#define IDS_METAINFOTEXT 45 -#define IDS_FIND 46 -#define IDS_FINDNEXT 47 #define IDS_RTL 48 -#define IDS_TREEVIEWFCN 49 -#define IDS_CAVERBAL 50 -#define IDS_DUMPRTF 51 - -#define IDI_ICON2 136 -#define IDD_DIALOG1 137 -#define IDD_ABOUT 149 -#define IDR_MAINMENU 149 -#define IDI_ICON1 150 #define IDS_USAGE_TITLE 200 #define IDS_USAGE_01 IDS_USAGE_TITLE + 1 @@ -152,7 +96,6 @@ #define IDS_E_BADCORHDR 404 #define IDS_E_OPENMD 405 #define IDS_E_COPYRIGHT 406 -#define IDS_E_DASMABORT 407 #define IDS_E_DASMOK 408 #define IDS_E_PARTDASM 409 #define IDS_E_INSTRDT 410 diff --git a/src/ildasm/staticfield.bmp b/src/ildasm/staticfield.bmp Binary files differdeleted file mode 100644 index 70edc432c1..0000000000 --- a/src/ildasm/staticfield.bmp +++ /dev/null diff --git a/src/ildasm/staticmethod.bmp b/src/ildasm/staticmethod.bmp Binary files differdeleted file mode 100644 index bc87d243ae..0000000000 --- a/src/ildasm/staticmethod.bmp +++ /dev/null diff --git a/src/ildasm/staticmethodg.bmp b/src/ildasm/staticmethodg.bmp Binary files differdeleted file mode 100644 index fedc1c56da..0000000000 --- a/src/ildasm/staticmethodg.bmp +++ /dev/null diff --git a/src/ildasm/windasm.cpp b/src/ildasm/windasm.cpp index 57f779fd50..13b56fca42 100644 --- a/src/ildasm/windasm.cpp +++ b/src/ildasm/windasm.cpp @@ -13,8 +13,6 @@ #include "dynamicarray.h" -#define DO_DASM_GUI -#include "dasmgui.h" #include "dasmenum.hpp" #include "dis.h" #include <ndpversion.h> @@ -26,7 +24,6 @@ #define MODE_DUMP_CLASS 1 #define MODE_DUMP_CLASS_METHOD 2 #define MODE_DUMP_CLASS_METHOD_SIG 3 -#define MODE_GUI 4 // All externs are defined in DASM.CPP extern BOOL g_fDumpIL; @@ -47,7 +44,6 @@ extern BOOL g_fShowSource; extern BOOL g_fInsertSourceLines; extern BOOL g_fTryInCode; extern BOOL g_fQuoteAllNames; -extern BOOL g_fShowProgressBar; extern BOOL g_fTDC; extern BOOL g_fShowCA; extern BOOL g_fCAVerbal; @@ -99,13 +95,6 @@ void Cleanup(); void DumpMetaInfo(__in __nullterminated const WCHAR* pszFileName, __in __nullterminated const char* pszObjFileName, void* GUICookie); FILE* OpenOutput(__in __nullterminated const char* szFileName); -// Do we only view an IL-dasm window in GUI mode? -// TRUE when we're in GUI mode and we specified a particular method from the cmd line -BOOL IsGuiILOnly() -{ - return (g_Mode & MODE_GUI) && (g_pszMethodToDump[0] != 0); -} - void PrintLogo() { printf("Microsoft (R) .NET Framework IL Disassembler. Version " VER_FILEVERSION_STR); @@ -221,11 +210,7 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam } else if (_stricmp(szOpt, "sou") == 0) { -#ifdef FEATURE_CORECLR printf("Warning: 'SOURCE' option is ignored for ildasm on CoreCLR.\n"); -#else - g_fShowSource = TRUE; -#endif } else if (_stricmp(szOpt, "lin") == 0) { @@ -303,10 +288,6 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam g_fHideFOA || g_fHidePrivScope; } - else if (_stricmp(szOpt, "nob") == 0) - { - g_fShowProgressBar = FALSE; - } else if (_stricmp(szOpt, "quo") == 0) { g_fQuoteAllNames = TRUE; @@ -383,29 +364,7 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam } else if ((_stricmp(szOpt, "met") == 0)&&g_fTDC) { -#ifdef FEATURE_CORECLR printf("Warning: 'METADATA' option is ignored for ildasm on CoreCLR.\n"); -#else - - char *pStr = EqualOrColon(szArg); - g_fDumpMetaInfo = TRUE; - if(pStr) - { - char szOptn[64]; - strncpy_s(szOptn, 64, pStr+1,10); - szOptn[3] = 0; // recognize metainfo specifier by first 3 chars - if (_stricmp(szOptn, "hex") == 0) g_ulMetaInfoFilter |= MDInfo::dumpMoreHex; - else if(_stricmp(szOptn, "csv") == 0) g_ulMetaInfoFilter |= MDInfo::dumpCSV; - else if(_stricmp(szOptn, "mdh") == 0) g_ulMetaInfoFilter |= MDInfo::dumpHeader; - else if(_stricmp(szOptn, "raw") == 0) g_ulMetaInfoFilter |= MDInfo::dumpRaw; - else if(_stricmp(szOptn, "hea") == 0) g_ulMetaInfoFilter |= MDInfo::dumpRawHeaps; - else if(_stricmp(szOptn, "sch") == 0) g_ulMetaInfoFilter |= MDInfo::dumpSchema; - else if(_stricmp(szOptn, "unr") == 0) g_ulMetaInfoFilter |= MDInfo::dumpUnsat; - else if(_stricmp(szOptn, "val") == 0) g_ulMetaInfoFilter |= MDInfo::dumpValidate; - else if(_stricmp(szOptn, "sta") == 0) g_ulMetaInfoFilter |= MDInfo::dumpStats; - else return -1; - } -#endif // FEATURE_CORECLR } else if (_stricmp(szOpt, "obj") == 0) { @@ -428,15 +387,6 @@ int ProcessOneArg(__in __nullterminated char* szArg, __out char** ppszObjFileNam strncpy_s(g_szOutputFile, MAX_FILENAME_LENGTH, pStr,MAX_FILENAME_LENGTH-1); g_szOutputFile[MAX_FILENAME_LENGTH-1] = 0; } - else - g_fShowProgressBar = FALSE; - - g_Mode &= ~MODE_GUI; - } - else if (_stricmp(szOpt, "tex") == 0) - { - g_Mode &= ~MODE_GUI; - g_fShowProgressBar = FALSE; } else { @@ -541,16 +491,9 @@ int ParseCmdLineA(__in __nullterminated char* szCmdLine, __out char** ppszObjFil return ret; } -#ifdef FEATURE_CORECLR int __cdecl main(int nCmdShow, char* lpCmdLine[]) -#else -int APIENTRY WinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - __in LPSTR lpCmdLine, - int nCmdShow) -#endif { -#if defined(FEATURE_CORECLR) && defined(FEATURE_PAL) +#if defined(FEATURE_PAL) if (0 != PAL_Initialize(nCmdShow, lpCmdLine)) { printError(g_pFile, "Error: Fail to PAL_Initialize\n"); @@ -575,10 +518,6 @@ int APIENTRY WinMain(HINSTANCE hInstance, g_fUseProperName = TRUE; -#ifndef FEATURE_CORECLR - g_hInstance = hInstance; - g_Mode = MODE_GUI; -#endif g_pszClassToDump[0]=0; g_pszMethodToDump[0]=0; g_pszSigToDump[0]=0; @@ -623,7 +562,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, SyntaxCon(); exit((iCommandLineParsed == 1) ? 0 : 1); } - if(!(g_Mode & MODE_GUI)) + { DWORD exitCode = 1; if(g_szInputFile[0] == 0) @@ -658,75 +597,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, Uninit(); exit(exitCode); } - else // if GUI ordered, restart as WinApp - { -#ifdef FEATURE_CORECLR - _ASSERTE(!"GUI is not supported for ildasm on CoreCLR."); -#else - PROCESS_INFORMATION pi; - STARTUPINFO si; - memset(&pi, 0, sizeof(PROCESS_INFORMATION) ); - memset(&si, 0, sizeof(STARTUPINFO) ); - si.cb = sizeof(STARTUPINFO); - si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; - si.wShowWindow = SW_SHOW; - si.hStdOutput = INVALID_HANDLE_VALUE; - si.hStdInput = INVALID_HANDLE_VALUE; - si.hStdError = INVALID_HANDLE_VALUE; - // Create the child process. - if(CreateProcessW(NULL, - wzCommandLine, // command line - NULL, // process security attributes - NULL, // primary thread security attributes - TRUE, // handles are inherited - DETACHED_PROCESS, // creation flags - NULL, // use parent's environment - NULL, // use parent's current directory - (LPSTARTUPINFOW)&si, // STARTUPINFO pointer - &pi)==0) // receives PROCESS_INFORMATION - { - printf(RstrANSI(IDS_E_CANTCREATEPROC));//"Failed to CreateProcess\n\n"); - exit(1); - } - exit(0); -#endif - } - } -#ifndef FEATURE_CORECLR - else //Second pass: WinApp - { - g_uCodePage = CP_UTF8; - g_Mode = MODE_GUI; - g_fDumpHTML = FALSE; - - if(g_szInputFile[0]) - { - char* pch = strrchr(g_szInputFile,'.'); - if(pch && (!_strcmpi(pch+1,"lib") || !_strcmpi(pch+1,"obj"))) - { - WszMessageBox(NULL, - RstrW(IDS_ONLYPEINGUI),//"ILDASM supports only PE files in graphic mode", - RstrW(IDS_BADFILETYPE),//"Invalid File Type", - MB_OK|MB_ICONERROR|GetDasmMBRTLStyle()); - return 0; - } - } - if (Init() == TRUE) - { - CreateGUI(); - if(g_szInputFile[0]) - { - GUISetModule(g_szInputFile); - DumpFile(); - } - GUIMainLoop(); - Cleanup(); - DestroyGUI(); - } - Uninit(); - return 0 ; } -#endif return 0; } |