mirror of https://github.com/x64dbg/GleeBug
added various functions to TitanEngineEmulator
This commit is contained in:
parent
56fe293287
commit
c5197f92d5
|
|
@ -135,6 +135,12 @@ protected:
|
||||||
rip.dwError);
|
rip.dwError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cbAttachBreakpoint() override
|
||||||
|
{
|
||||||
|
printf("Attach breakpoint reached, GIP: 0x%p\n",
|
||||||
|
mRegisters->Gip());
|
||||||
|
}
|
||||||
|
|
||||||
void cbSystemBreakpoint() override
|
void cbSystemBreakpoint() override
|
||||||
{
|
{
|
||||||
printf("System breakpoint reached, GIP: 0x%p\n",
|
printf("System breakpoint reached, GIP: 0x%p\n",
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ public:
|
||||||
//Debugger
|
//Debugger
|
||||||
PROCESS_INFORMATION* InitDebugW(const wchar_t* szFileName, const wchar_t* szCommandLine, const wchar_t* szCurrentFolder)
|
PROCESS_INFORMATION* InitDebugW(const wchar_t* szFileName, const wchar_t* szCommandLine, const wchar_t* szCurrentFolder)
|
||||||
{
|
{
|
||||||
|
mCbATTACHBREAKPOINT = nullptr;
|
||||||
if (!Init(szFileName, szCommandLine, szCurrentFolder))
|
if (!Init(szFileName, szCommandLine, szCurrentFolder))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return &mMainProcess;
|
return &mMainProcess;
|
||||||
|
|
@ -27,13 +28,16 @@ public:
|
||||||
|
|
||||||
bool AttachDebugger(DWORD ProcessId, bool KillOnExit, LPVOID DebugInfo, LPVOID CallBack)
|
bool AttachDebugger(DWORD ProcessId, bool KillOnExit, LPVOID DebugInfo, LPVOID CallBack)
|
||||||
{
|
{
|
||||||
//TODO
|
if(!Attach(ProcessId))
|
||||||
return false;
|
return false;
|
||||||
|
mCbATTACHBREAKPOINT = STEPCALLBACK(CallBack);
|
||||||
|
mAttachProcessInfo = (PROCESS_INFORMATION*)DebugInfo;
|
||||||
|
DebugLoop();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DetachDebuggerEx(DWORD ProcessId)
|
bool DetachDebuggerEx(DWORD ProcessId)
|
||||||
{
|
{
|
||||||
//TODO
|
|
||||||
Detach();
|
Detach();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -141,6 +145,16 @@ public:
|
||||||
mSetDebugPrivilege = VariableSet;
|
mSetDebugPrivilege = VariableSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PROCESS_INFORMATION* TitanGetProcessInformation()
|
||||||
|
{
|
||||||
|
return &mMainProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
STARTUPINFOW* TitanGetStartupInformation()
|
||||||
|
{
|
||||||
|
return &mMainStartupInfo;
|
||||||
|
}
|
||||||
|
|
||||||
//Misc
|
//Misc
|
||||||
bool IsJumpGoingToExecuteEx(HANDLE hProcess, HANDLE hThread, ULONG_PTR InstructionAddress, ULONG_PTR RegFlags)
|
bool IsJumpGoingToExecuteEx(HANDLE hProcess, HANDLE hThread, ULONG_PTR InstructionAddress, ULONG_PTR RegFlags)
|
||||||
{
|
{
|
||||||
|
|
@ -532,6 +546,16 @@ protected:
|
||||||
mCbDEBUGEVENT(&debugEvent);
|
mCbDEBUGEVENT(&debugEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cbAttachBreakpoint() override
|
||||||
|
{
|
||||||
|
if(mCbATTACHBREAKPOINT)
|
||||||
|
{
|
||||||
|
if(mAttachProcessInfo)
|
||||||
|
*mAttachProcessInfo = mMainProcess;
|
||||||
|
mCbATTACHBREAKPOINT();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void cbSystemBreakpoint() override
|
void cbSystemBreakpoint() override
|
||||||
{
|
{
|
||||||
if (mCbSYSTEMBREAKPOINT)
|
if (mCbSYSTEMBREAKPOINT)
|
||||||
|
|
@ -588,12 +612,16 @@ private: //functions
|
||||||
|
|
||||||
Thread* threadFromHandle(HANDLE hThread) const
|
Thread* threadFromHandle(HANDLE hThread) const
|
||||||
{
|
{
|
||||||
|
if(!hThread)
|
||||||
|
return mThread;
|
||||||
//TODO: properly implement this
|
//TODO: properly implement this
|
||||||
return mThread;
|
return mThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
Process* processFromHandle(HANDLE hProcess) const
|
Process* processFromHandle(HANDLE hProcess) const
|
||||||
{
|
{
|
||||||
|
if(!hProcess)
|
||||||
|
return mProcess;
|
||||||
//TODO: properly implement this
|
//TODO: properly implement this
|
||||||
return mProcess;
|
return mProcess;
|
||||||
}
|
}
|
||||||
|
|
@ -648,4 +676,6 @@ private: //variables
|
||||||
CUSTOMHANDLER mCbOUTPUTDEBUGSTRING = nullptr;
|
CUSTOMHANDLER mCbOUTPUTDEBUGSTRING = nullptr;
|
||||||
CUSTOMHANDLER mCbUNHANDLEDEXCEPTION = nullptr;
|
CUSTOMHANDLER mCbUNHANDLEDEXCEPTION = nullptr;
|
||||||
CUSTOMHANDLER mCbDEBUGEVENT = nullptr;
|
CUSTOMHANDLER mCbDEBUGEVENT = nullptr;
|
||||||
|
STEPCALLBACK mCbATTACHBREAKPOINT = nullptr;
|
||||||
|
PROCESS_INFORMATION* mAttachProcessInfo = nullptr;
|
||||||
};
|
};
|
||||||
|
|
@ -81,6 +81,16 @@ __declspec(dllexport) void TITCALL SetEngineVariable(DWORD VariableId, bool Vari
|
||||||
emu.SetEngineVariable(VariableId, VariableSet);
|
emu.SetEngineVariable(VariableId, VariableSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__declspec(dllexport) PROCESS_INFORMATION* TITCALL TitanGetProcessInformation()
|
||||||
|
{
|
||||||
|
return emu.TitanGetProcessInformation();
|
||||||
|
}
|
||||||
|
|
||||||
|
__declspec(dllexport) STARTUPINFOW* TITCALL TitanGetStartupInformation()
|
||||||
|
{
|
||||||
|
return emu.TitanGetStartupInformation();
|
||||||
|
}
|
||||||
|
|
||||||
//Misc
|
//Misc
|
||||||
__declspec(dllexport) bool TITCALL IsJumpGoingToExecuteEx(HANDLE hProcess, HANDLE hThread, ULONG_PTR InstructionAddress, ULONG_PTR RegFlags)
|
__declspec(dllexport) bool TITCALL IsJumpGoingToExecuteEx(HANDLE hProcess, HANDLE hThread, ULONG_PTR InstructionAddress, ULONG_PTR RegFlags)
|
||||||
{
|
{
|
||||||
|
|
@ -118,6 +128,11 @@ __declspec(dllexport) ULONG_PTR TITCALL GetContextDataEx(HANDLE hActiveThread, D
|
||||||
return emu.GetContextDataEx(hActiveThread, IndexOfRegister);
|
return emu.GetContextDataEx(hActiveThread, IndexOfRegister);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__declspec(dllexport) ULONG_PTR TITCALL GetContextData(DWORD IndexOfRegister)
|
||||||
|
{
|
||||||
|
return GetContextDataEx(nullptr, IndexOfRegister);
|
||||||
|
}
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL SetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister, ULONG_PTR NewRegisterValue)
|
__declspec(dllexport) bool TITCALL SetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister, ULONG_PTR NewRegisterValue)
|
||||||
{
|
{
|
||||||
return emu.SetContextDataEx(hActiveThread, IndexOfRegister, NewRegisterValue);
|
return emu.SetContextDataEx(hActiveThread, IndexOfRegister, NewRegisterValue);
|
||||||
|
|
@ -149,6 +164,11 @@ __declspec(dllexport) bool TITCALL StaticFileLoadW(const wchar_t* szFileName, DW
|
||||||
return emu.StaticFileLoadW(szFileName, DesiredAccess, SimulateLoad, FileHandle, LoadedSize, FileMap, FileMapVA);
|
return emu.StaticFileLoadW(szFileName, DesiredAccess, SimulateLoad, FileHandle, LoadedSize, FileMap, FileMapVA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__declspec(dllexport) bool TITCALL StaticFileLoad(const char* szFileName, DWORD DesiredAccess, bool SimulateLoad, LPHANDLE FileHandle, LPDWORD LoadedSize, LPHANDLE FileMap, PULONG_PTR FileMapVA)
|
||||||
|
{
|
||||||
|
return StaticFileLoadW(Utf8ToUtf16(szFileName).c_str(), DesiredAccess, SimulateLoad, FileHandle, LoadedSize, FileMap, FileMapVA);
|
||||||
|
}
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL StaticFileUnloadW(const wchar_t* szFileName, bool CommitChanges, HANDLE FileHandle, DWORD LoadedSize, HANDLE FileMap, ULONG_PTR FileMapVA)
|
__declspec(dllexport) bool TITCALL StaticFileUnloadW(const wchar_t* szFileName, bool CommitChanges, HANDLE FileHandle, DWORD LoadedSize, HANDLE FileMap, ULONG_PTR FileMapVA)
|
||||||
{
|
{
|
||||||
return emu.StaticFileUnloadW(szFileName, CommitChanges, FileHandle, LoadedSize, FileMap, FileMapVA);
|
return emu.StaticFileUnloadW(szFileName, CommitChanges, FileHandle, LoadedSize, FileMap, FileMapVA);
|
||||||
|
|
@ -164,6 +184,11 @@ __declspec(dllexport) ULONG_PTR TITCALL ConvertVAtoFileOffsetEx(ULONG_PTR FileMa
|
||||||
return emu.ConvertVAtoFileOffsetEx(FileMapVA, FileSize, ImageBase, AddressToConvert, AddressIsRVA, ReturnType);
|
return emu.ConvertVAtoFileOffsetEx(FileMapVA, FileSize, ImageBase, AddressToConvert, AddressIsRVA, ReturnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__declspec(dllexport) ULONG_PTR TITCALL ConvertVAtoFileOffset(ULONG_PTR FileMapVA, ULONG_PTR AddressToConvert, bool ReturnType)
|
||||||
|
{
|
||||||
|
return ConvertVAtoFileOffsetEx(FileMapVA, 0, 0, AddressToConvert, false, ReturnType);
|
||||||
|
}
|
||||||
|
|
||||||
__declspec(dllexport) ULONG_PTR TITCALL GetPE32DataFromMappedFile(ULONG_PTR FileMapVA, DWORD WhichSection, DWORD WhichData)
|
__declspec(dllexport) ULONG_PTR TITCALL GetPE32DataFromMappedFile(ULONG_PTR FileMapVA, DWORD WhichSection, DWORD WhichData)
|
||||||
{
|
{
|
||||||
return emu.GetPE32DataFromMappedFile(FileMapVA, WhichSection, WhichData);
|
return emu.GetPE32DataFromMappedFile(FileMapVA, WhichSection, WhichData);
|
||||||
|
|
@ -174,6 +199,11 @@ __declspec(dllexport) ULONG_PTR TITCALL GetPE32DataW(const wchar_t* szFileName,
|
||||||
return emu.GetPE32DataW(szFileName, WhichSection, WhichData);
|
return emu.GetPE32DataW(szFileName, WhichSection, WhichData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__declspec(dllexport) ULONG_PTR TITCALL GetPE32Data(const char* szFileName, DWORD WhichSection, DWORD WhichData)
|
||||||
|
{
|
||||||
|
return GetPE32DataW(Utf8ToUtf16(szFileName).c_str(), WhichSection, WhichData);
|
||||||
|
}
|
||||||
|
|
||||||
__declspec(dllexport) bool TITCALL IsFileDLLW(const wchar_t* szFileName, ULONG_PTR FileMapVA)
|
__declspec(dllexport) bool TITCALL IsFileDLLW(const wchar_t* szFileName, ULONG_PTR FileMapVA)
|
||||||
{
|
{
|
||||||
return emu.IsFileDLLW(szFileName, FileMapVA);
|
return emu.IsFileDLLW(szFileName, FileMapVA);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue