1
0
Fork 0

remove some TitanEngine calls

This commit is contained in:
mrexodia 2017-05-25 03:24:29 +02:00
parent 9394b06c4d
commit 2fd5cedd0d
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
3 changed files with 31 additions and 45 deletions

View File

@ -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<void*> 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<char*> 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, &regionSize);
if(!base || !regionSize)
return false;
Memory<void*> 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;

View File

@ -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)
{

View File

@ -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());