From 2fd5cedd0d8a4c0abc81bda68faf1e173067e39f Mon Sep 17 00:00:00 2001 From: mrexodia Date: Thu, 25 May 2017 03:24:29 +0200 Subject: [PATCH] remove some TitanEngine calls --- src/dbg/addrinfo.cpp | 43 +++++++++++++------------------ src/dbg/commands/cmd-analysis.cpp | 32 +++++++++-------------- src/dbg/debugger.cpp | 1 + 3 files changed, 31 insertions(+), 45 deletions(-) diff --git a/src/dbg/addrinfo.cpp b/src/dbg/addrinfo.cpp index 1f478a4b..6ad20263 100644 --- a/src/dbg/addrinfo.cpp +++ b/src/dbg/addrinfo.cpp @@ -13,16 +13,15 @@ ///api functions bool apienumexports(duint base, const EXPORTENUMCALLBACK & cbEnum) { - duint size; - base = MemFindBaseAddr(base, &size); - if(!base || !size) - return false; - Memory buffer(size, "apienumexports:buffer"); - if(!MemRead(base, buffer(), size)) - return false; - IMAGE_NT_HEADERS* pnth = (IMAGE_NT_HEADERS*)((duint)buffer() + GetPE32DataFromMappedFile((ULONG_PTR)buffer(), 0, UE_PE_OFFSET)); - duint export_dir_rva = pnth->OptionalHeader.DataDirectory[0].VirtualAddress; - duint export_dir_size = pnth->OptionalHeader.DataDirectory[0].Size; + duint export_dir_rva, export_dir_size; + { + SHARED_ACQUIRE(LockModules); + auto modinfo = ModInfoFromAddr(base); + if(!modinfo) + return false; + export_dir_rva = GetPE32DataFromMappedFile(modinfo->fileMapVA, 0, UE_EXPORTTABLEADDRESS); + export_dir_size = GetPE32DataFromMappedFile(modinfo->fileMapVA, 0, UE_EXPORTTABLESIZE); + } IMAGE_EXPORT_DIRECTORY export_dir; memset(&export_dir, 0, sizeof(export_dir)); MemRead((export_dir_rva + base), &export_dir, sizeof(export_dir)); @@ -69,32 +68,26 @@ bool apienumexports(duint base, const EXPORTENUMCALLBACK & cbEnum) bool apienumimports(duint base, const IMPORTENUMCALLBACK & cbEnum) { + ULONG_PTR importTableRva, importTableSize; + { + SHARED_ACQUIRE(LockModules); + auto modinfo = ModInfoFromAddr(base); + if(!modinfo) + return false; + importTableRva = GetPE32DataFromMappedFile(modinfo->fileMapVA, 0, UE_IMPORTTABLEADDRESS); + importTableSize = GetPE32DataFromMappedFile(modinfo->fileMapVA, 0, UE_IMPORTTABLESIZE); + } // Variables bool readSuccess; Memory importName(MAX_IMPORT_SIZE + 1, "apienumimports:buffer"); char importModuleName[MAX_MODULE_SIZE + 1] = ""; duint regionSize; - ULONG_PTR importTableRva, importTableSize; PIMAGE_IMPORT_DESCRIPTOR importTableVa; IMAGE_IMPORT_DESCRIPTOR importDescriptor; PIMAGE_THUNK_DATA imageIATVa, imageINTVa; IMAGE_THUNK_DATA imageOftThunkData, imageFtThunkData; PIMAGE_IMPORT_BY_NAME pImageImportByNameVa; - // Get page size - base = MemFindBaseAddr(base, ®ionSize); - if(!base || !regionSize) - return false; - Memory buffer(regionSize, "apienumimports:buffer"); - - // Read first page into buffer - if(!MemRead(base, buffer(), regionSize)) - return false; - - // Import Table address and size - importTableRva = GetPE32DataFromMappedFile((duint)buffer(), 0, UE_IMPORTTABLEADDRESS); - importTableSize = GetPE32DataFromMappedFile((duint)buffer(), 0, UE_IMPORTTABLESIZE); - // Return if no imports if(!importTableSize) return false; diff --git a/src/dbg/commands/cmd-analysis.cpp b/src/dbg/commands/cmd-analysis.cpp index 2d88ab98..851750b6 100644 --- a/src/dbg/commands/cmd-analysis.cpp +++ b/src/dbg/commands/cmd-analysis.cpp @@ -224,35 +224,27 @@ bool cbDebugDownloadSymbol(int argc, char* argv[]) bool cbInstrImageinfo(int argc, char* argv[]) { - duint mod; - SHARED_ACQUIRE(LockModules); - MODINFO* info; duint address; if(argc < 2) address = GetContextDataEx(hActiveThread, UE_CIP); - else + else if(!valfromstring(argv[1], &address)) { - if(!valfromstring(argv[1], &address)) + dputs(QT_TRANSLATE_NOOP("DBG", "Invalid argument")); + return false; + } + duint c, dllc, mod; + { + SHARED_ACQUIRE(LockModules); + auto modinfo = ModInfoFromAddr(address); + if(!modinfo) { dputs(QT_TRANSLATE_NOOP("DBG", "Invalid argument")); return false; } + c = GetPE32DataFromMappedFile(modinfo->fileMapVA, 0, UE_CHARACTERISTICS); + dllc = GetPE32DataFromMappedFile(modinfo->fileMapVA, 0, UE_DLLCHARACTERISTICS); + mod = modinfo->base; } - mod = MemFindBaseAddr(address, nullptr); - if(mod == 0) - { - dputs(QT_TRANSLATE_NOOP("DBG", "Invalid argument")); - return false; - } - info = ModInfoFromAddr(mod); - if(info == nullptr) - { - dputs(QT_TRANSLATE_NOOP("DBG", "Invalid argument")); - return false; - } - auto c = GetPE32DataFromMappedFile(info->fileMapVA, 0, UE_CHARACTERISTICS); - auto dllc = GetPE32DataFromMappedFile(info->fileMapVA, 0, UE_DLLCHARACTERISTICS); - SHARED_RELEASE(); auto pFlag = [](ULONG_PTR value, ULONG_PTR flag, const char* name) { diff --git a/src/dbg/debugger.cpp b/src/dbg/debugger.cpp index 57e77130..71ef37da 100644 --- a/src/dbg/debugger.cpp +++ b/src/dbg/debugger.cpp @@ -2844,6 +2844,7 @@ static void debugLoopFunction(void* lpParameter, bool attach) pDebuggedBase = 0; pCreateProcessBase = 0; isDetachedByUser = false; + hActiveThread = nullptr; if(!gDllLoader.empty()) //Delete the DLL loader (#1496) { DeleteFileW(gDllLoader.c_str());