- fixed a small SDK bug (with UE_MEMORY_EXECUTE)

- fixed a bug with MEMORY_EXECUTE (which was excluded as memory breakpoint type)
- slightly bigger buffer, to avoid undefined output when you directly use the returned char pointer as string
This commit is contained in:
mr.exodia 2013-12-02 20:47:38 +01:00
parent 592f618a9c
commit d585941ba9
4 changed files with 2232 additions and 2230 deletions

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ Release/*/*
*.suo *.suo
*.bmarks *.bmarks
TitanEngine/TitanEngine.cscope_file_list TitanEngine/TitanEngine.cscope_file_list
*.opensdf

View File

@ -138,7 +138,7 @@ const BYTE UE_HARDWARE = 2;
const BYTE UE_MEMORY = 3; const BYTE UE_MEMORY = 3;
const BYTE UE_MEMORY_READ = 4; const BYTE UE_MEMORY_READ = 4;
const BYTE UE_MEMORY_WRITE = 5; const BYTE UE_MEMORY_WRITE = 5;
const BYTE UE_MEMORY_EXECUTE = 5; const BYTE UE_MEMORY_EXECUTE = 6;
const DWORD UE_BREAKPOINT_TYPE_INT3 = 0x10000000; const DWORD UE_BREAKPOINT_TYPE_INT3 = 0x10000000;
const DWORD UE_BREAKPOINT_TYPE_LONG_INT3 = 0x20000000; const DWORD UE_BREAKPOINT_TYPE_LONG_INT3 = 0x20000000;
const DWORD UE_BREAKPOINT_TYPE_UD2 = 0x30000000; const DWORD UE_BREAKPOINT_TYPE_UD2 = 0x30000000;

View File

@ -4,7 +4,7 @@
#define TITCALL #define TITCALL
#if _MSC_VER > 1000 #if _MSC_VER > 1000
#pragma once #pragma once
#endif #endif
namespace TE namespace TE
@ -14,11 +14,11 @@ namespace TE
namespace UE namespace UE
{ {
#ifdef TITANENGINE #ifdef TITANENGINE
#undef TITANENGINE #undef TITANENGINE
#endif #endif
#include "TitanEngine.h" #include "TitanEngine.h"
} }
// ---- // ----
@ -687,11 +687,11 @@ public:
using DumperW::ResizeLastSection; using DumperW::ResizeLastSection;
using DumperA::SetSharedOverlay; using DumperA::SetSharedOverlay;
using DumperW::SetSharedOverlay; using DumperW::SetSharedOverlay;
#ifndef UNICODE #ifndef UNICODE
using DumperA::GetSharedOverlay; using DumperA::GetSharedOverlay;
#else #else
using DumperW::GetSharedOverlay; using DumperW::GetSharedOverlay;
#endif #endif
using DumperA::DeleteLastSection; using DumperA::DeleteLastSection;
using DumperW::DeleteLastSection; using DumperW::DeleteLastSection;
using DumperA::DeleteLastSectionEx; using DumperA::DeleteLastSectionEx;
@ -1997,28 +1997,28 @@ class Librarian : LibrarianX, LibrarianA, LibrarianW
{ {
public: public:
#ifndef UNICODE #ifndef UNICODE
typedef LibrarianA::LIBRARY_ITEM_DATA LIBRARY_ITEM_DATA; typedef LibrarianA::LIBRARY_ITEM_DATA LIBRARY_ITEM_DATA;
#else #else
typedef LibrarianW::LIBRARY_ITEM_DATA LIBRARY_ITEM_DATA; typedef LibrarianW::LIBRARY_ITEM_DATA LIBRARY_ITEM_DATA;
#endif #endif
using LibrarianX::fLibraryBreakPointCallback; using LibrarianX::fLibraryBreakPointCallback;
#ifndef UNICODE #ifndef UNICODE
typedef LibrarianA::fLibraryEnumCallback fLibraryEnumCallback; typedef LibrarianA::fLibraryEnumCallback fLibraryEnumCallback;
#else #else
typedef LibrarianW::fLibraryEnumCallback fLibraryEnumCallback; typedef LibrarianW::fLibraryEnumCallback fLibraryEnumCallback;
#endif #endif
using LibrarianX::SetBreakPoint; using LibrarianX::SetBreakPoint;
using LibrarianX::RemoveBreakPoint; using LibrarianX::RemoveBreakPoint;
using LibrarianA::GetLibraryInfo; using LibrarianA::GetLibraryInfo;
using LibrarianW::GetLibraryInfo; using LibrarianW::GetLibraryInfo;
#ifndef UNICODE #ifndef UNICODE
using LibrarianA::GetLibraryInfoEx; using LibrarianA::GetLibraryInfoEx;
#else #else
using LibrarianW::GetLibraryInfoEx; using LibrarianW::GetLibraryInfoEx;
#endif #endif
using LibrarianA::EnumLibraryInfo; using LibrarianA::EnumLibraryInfo;
using LibrarianW::EnumLibraryInfo; using LibrarianW::EnumLibraryInfo;
}; };
@ -2511,11 +2511,11 @@ public:
using HandlerX::GetActiveHandleCount; using HandlerX::GetActiveHandleCount;
using HandlerX::IsHandleOpen; using HandlerX::IsHandleOpen;
#ifndef UNICODE #ifndef UNICODE
using HandlerA::GetHandleName; using HandlerA::GetHandleName;
#else #else
using HandlerW::GetHandleName; using HandlerW::GetHandleName;
#endif #endif
using HandlerX::EnumerateOpenHandles; using HandlerX::EnumerateOpenHandles;
using HandlerX::GetHandleDetails; using HandlerX::GetHandleDetails;
using HandlerX::CloseRemoteHandle; using HandlerX::CloseRemoteHandle;

View File

@ -5005,7 +5005,7 @@ __declspec(dllexport) long long TITCALL GetPE32DataFromMappedFile(ULONG_PTR File
PIMAGE_SECTION_HEADER PESections; PIMAGE_SECTION_HEADER PESections;
DWORD SectionNumber = 0; DWORD SectionNumber = 0;
BOOL FileIs64; BOOL FileIs64;
static char sectionName[8] = ""; static char sectionName[9] = "";
if(FileMapVA != NULL) if(FileMapVA != NULL)
{ {
@ -13540,7 +13540,8 @@ __declspec(dllexport) bool TITCALL RemoveMemoryBPX(ULONG_PTR MemoryStart, DWORD
if(BreakPointBuffer[i].BreakPointAddress == MemoryStart && if(BreakPointBuffer[i].BreakPointAddress == MemoryStart &&
(BreakPointBuffer[i].BreakPointType == UE_MEMORY || (BreakPointBuffer[i].BreakPointType == UE_MEMORY ||
BreakPointBuffer[i].BreakPointType == UE_MEMORY_READ || BreakPointBuffer[i].BreakPointType == UE_MEMORY_READ ||
BreakPointBuffer[i].BreakPointType == UE_MEMORY_WRITE) BreakPointBuffer[i].BreakPointType == UE_MEMORY_WRITE ||
BreakPointBuffer[i].BreakPointType == UE_MEMORY_EXECUTE)
) )
{ {
if(i - 1 == BreakPointSetCount) if(i - 1 == BreakPointSetCount)
@ -16101,7 +16102,7 @@ __declspec(dllexport) bool TITCALL RemoveAllBreakPoints(DWORD RemoveOption)
{ {
DeleteBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress); DeleteBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress);
} }
else if(BreakPointBuffer[i].BreakPointType >= UE_MEMORY && BreakPointBuffer[i].BreakPointType <= UE_MEMORY_WRITE) else if(BreakPointBuffer[i].BreakPointType >= UE_MEMORY && BreakPointBuffer[i].BreakPointType <= UE_MEMORY_EXECUTE)
{ {
RemoveMemoryBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress, BreakPointBuffer[i].BreakPointSize); RemoveMemoryBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress, BreakPointBuffer[i].BreakPointSize);
} }
@ -16126,7 +16127,7 @@ __declspec(dllexport) bool TITCALL RemoveAllBreakPoints(DWORD RemoveOption)
{ {
DisableBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress); DisableBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress);
} }
else if(BreakPointBuffer[i].BreakPointType >= UE_MEMORY && BreakPointBuffer[i].BreakPointType <= UE_MEMORY_WRITE) else if(BreakPointBuffer[i].BreakPointType >= UE_MEMORY && BreakPointBuffer[i].BreakPointType <= UE_MEMORY_EXECUTE)
{ {
RemoveMemoryBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress, BreakPointBuffer[i].BreakPointSize); RemoveMemoryBPX((ULONG_PTR)BreakPointBuffer[i].BreakPointAddress, BreakPointBuffer[i].BreakPointSize);
RtlZeroMemory(&BreakPointBuffer[i], sizeof BreakPointDetail); RtlZeroMemory(&BreakPointBuffer[i], sizeof BreakPointDetail);