DBG: dynamicmem now working (crashes before)
This commit is contained in:
parent
0bff6d7427
commit
b38a55bffb
|
@ -119,7 +119,7 @@ void formathex(char* string)
|
||||||
{
|
{
|
||||||
int len = (int)strlen(string);
|
int len = (int)strlen(string);
|
||||||
_strupr(string);
|
_strupr(string);
|
||||||
char* new_string = Memory(len + 1, "formathex:new_string");
|
Memory<char*> new_string(len + 1, "formathex:new_string");
|
||||||
memset(new_string, 0, len + 1);
|
memset(new_string, 0, len + 1);
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
if(isxdigit(string[i]))
|
if(isxdigit(string[i]))
|
||||||
|
@ -131,7 +131,7 @@ void formatdec(char* string)
|
||||||
{
|
{
|
||||||
int len = (int)strlen(string);
|
int len = (int)strlen(string);
|
||||||
_strupr(string);
|
_strupr(string);
|
||||||
char* new_string = Memory(len + 1, "formatdec:new_string");
|
Memory<char*> new_string(len + 1, "formatdec:new_string");
|
||||||
memset(new_string, 0, len + 1);
|
memset(new_string, 0, len + 1);
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
if(isdigit(string[i]))
|
if(isdigit(string[i]))
|
||||||
|
|
|
@ -232,7 +232,7 @@ bool apienumexports(uint base, EXPORTENUMCALLBACK cbEnum)
|
||||||
MEMORY_BASIC_INFORMATION mbi;
|
MEMORY_BASIC_INFORMATION mbi;
|
||||||
VirtualQueryEx(fdProcessInfo->hProcess, (const void*)base, &mbi, sizeof(mbi));
|
VirtualQueryEx(fdProcessInfo->hProcess, (const void*)base, &mbi, sizeof(mbi));
|
||||||
uint size = mbi.RegionSize;
|
uint size = mbi.RegionSize;
|
||||||
void* buffer = Memory(size, "apienumexports:buffer");
|
Memory<void*> buffer(size, "apienumexports:buffer");
|
||||||
if(!memread(fdProcessInfo->hProcess, (const void*)base, buffer, size, 0))
|
if(!memread(fdProcessInfo->hProcess, (const void*)base, buffer, size, 0))
|
||||||
return false;
|
return false;
|
||||||
IMAGE_NT_HEADERS* pnth = (IMAGE_NT_HEADERS*)((uint)buffer + GetPE32DataFromMappedFile((ULONG_PTR)buffer, 0, UE_PE_OFFSET));
|
IMAGE_NT_HEADERS* pnth = (IMAGE_NT_HEADERS*)((uint)buffer + GetPE32DataFromMappedFile((ULONG_PTR)buffer, 0, UE_PE_OFFSET));
|
||||||
|
|
|
@ -487,7 +487,7 @@ static BOOL CALLBACK SymRegisterCallbackProc64(HANDLE hProcess, ULONG ActionCode
|
||||||
}
|
}
|
||||||
if(strstr(text, " bytes - "))
|
if(strstr(text, " bytes - "))
|
||||||
{
|
{
|
||||||
char* newtext = Memory(len + 1, "SymRegisterCallbackProc64:newtext");
|
Memory<char*> newtext(len + 1, "SymRegisterCallbackProc64:newtext");
|
||||||
strcpy(newtext, text);
|
strcpy(newtext, text);
|
||||||
strstr(newtext, " bytes - ")[8] = 0;
|
strstr(newtext, " bytes - ")[8] = 0;
|
||||||
GuiSymbolLogAdd(newtext);
|
GuiSymbolLogAdd(newtext);
|
||||||
|
@ -700,7 +700,7 @@ static void cbCreateProcess(CREATE_PROCESS_DEBUG_INFO* CreateProcessInfo)
|
||||||
if(NumberOfCallBacks)
|
if(NumberOfCallBacks)
|
||||||
{
|
{
|
||||||
dprintf("TLS Callbacks: %d\n", NumberOfCallBacks);
|
dprintf("TLS Callbacks: %d\n", NumberOfCallBacks);
|
||||||
uint* TLSCallBacks = Memory(NumberOfCallBacks * sizeof(uint), "cbCreateProcess:TLSCallBacks");
|
Memory<uint*> TLSCallBacks(NumberOfCallBacks * sizeof(uint), "cbCreateProcess:TLSCallBacks");
|
||||||
if(!TLSGrabCallBackData(DebugFileName, TLSCallBacks, &NumberOfCallBacks))
|
if(!TLSGrabCallBackData(DebugFileName, TLSCallBacks, &NumberOfCallBacks))
|
||||||
dputs("failed to get TLS callback addresses!");
|
dputs("failed to get TLS callback addresses!");
|
||||||
else
|
else
|
||||||
|
@ -956,7 +956,7 @@ static void cbOutputDebugString(OUTPUT_DEBUG_STRING_INFO* DebugString)
|
||||||
|
|
||||||
if(!DebugString->fUnicode) //ASCII
|
if(!DebugString->fUnicode) //ASCII
|
||||||
{
|
{
|
||||||
char* DebugText = Memory(DebugString->nDebugStringLength + 1, "cbOutputDebugString:DebugText");
|
Memory<char*> DebugText(DebugString->nDebugStringLength + 1, "cbOutputDebugString:DebugText");
|
||||||
if(memread(fdProcessInfo->hProcess, DebugString->lpDebugStringData, DebugText, DebugString->nDebugStringLength, 0))
|
if(memread(fdProcessInfo->hProcess, DebugString->lpDebugStringData, DebugText, DebugString->nDebugStringLength, 0))
|
||||||
{
|
{
|
||||||
int len = (int)strlen(DebugText);
|
int len = (int)strlen(DebugText);
|
||||||
|
@ -964,7 +964,7 @@ static void cbOutputDebugString(OUTPUT_DEBUG_STRING_INFO* DebugString)
|
||||||
for(int i = 0; i < len; i++)
|
for(int i = 0; i < len; i++)
|
||||||
if(DebugText[i] == '\\' or DebugText[i] == '\"' or !isprint(DebugText[i]))
|
if(DebugText[i] == '\\' or DebugText[i] == '\"' or !isprint(DebugText[i]))
|
||||||
escape_count++;
|
escape_count++;
|
||||||
char* DebugTextEscaped = Memory(len + escape_count * 3 + 1, "cbOutputDebugString:DebugTextEscaped");
|
Memory<char*> DebugTextEscaped(len + escape_count * 3 + 1, "cbOutputDebugString:DebugTextEscaped");
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
switch(DebugText[i])
|
switch(DebugText[i])
|
||||||
|
@ -1069,7 +1069,7 @@ static void cbException(EXCEPTION_DEBUG_INFO* ExceptionData)
|
||||||
nameInfo.dwThreadID = ((DEBUG_EVENT*)GetDebugData())->dwThreadId;
|
nameInfo.dwThreadID = ((DEBUG_EVENT*)GetDebugData())->dwThreadId;
|
||||||
if(nameInfo.dwType == 0x1000 and nameInfo.dwFlags == 0 and threadisvalid(nameInfo.dwThreadID)) //passed basic checks
|
if(nameInfo.dwType == 0x1000 and nameInfo.dwFlags == 0 and threadisvalid(nameInfo.dwThreadID)) //passed basic checks
|
||||||
{
|
{
|
||||||
char* ThreadName = Memory(MAX_THREAD_NAME_SIZE, "cbException:ThreadName");
|
Memory<char*> ThreadName(MAX_THREAD_NAME_SIZE, "cbException:ThreadName");
|
||||||
memset(ThreadName, 0, MAX_THREAD_NAME_SIZE);
|
memset(ThreadName, 0, MAX_THREAD_NAME_SIZE);
|
||||||
if(memread(fdProcessInfo->hProcess, nameInfo.szName, ThreadName, MAX_THREAD_NAME_SIZE - 1, 0))
|
if(memread(fdProcessInfo->hProcess, nameInfo.szName, ThreadName, MAX_THREAD_NAME_SIZE - 1, 0))
|
||||||
{
|
{
|
||||||
|
@ -1078,7 +1078,7 @@ static void cbException(EXCEPTION_DEBUG_INFO* ExceptionData)
|
||||||
for(int i = 0; i < len; i++)
|
for(int i = 0; i < len; i++)
|
||||||
if(ThreadName[i] == '\\' or ThreadName[i] == '\"' or !isprint(ThreadName[i]))
|
if(ThreadName[i] == '\\' or ThreadName[i] == '\"' or !isprint(ThreadName[i]))
|
||||||
escape_count++;
|
escape_count++;
|
||||||
char* ThreadNameEscaped = Memory(len + escape_count * 3 + 1, "cbException:ThreadNameEscaped");
|
Memory<char*> ThreadNameEscaped(len + escape_count * 3 + 1, "cbException:ThreadNameEscaped");
|
||||||
memset(ThreadNameEscaped, 0, len + escape_count * 3 + 1);
|
memset(ThreadNameEscaped, 0, len + escape_count * 3 + 1);
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -338,7 +338,7 @@ bool disasmgetstringat(uint addr, STRING_TYPE* type, char* ascii, char* unicode,
|
||||||
*type = str_none;
|
*type = str_none;
|
||||||
if(!disasmispossiblestring(addr))
|
if(!disasmispossiblestring(addr))
|
||||||
return false;
|
return false;
|
||||||
unsigned char* data = Memory((maxlen + 1) * 2, "disasmgetstringat:data");
|
Memory<unsigned char*> data((maxlen + 1) * 2, "disasmgetstringat:data");
|
||||||
memset(data, 0, (maxlen + 1) * 2);
|
memset(data, 0, (maxlen + 1) * 2);
|
||||||
if(!memread(fdProcessInfo->hProcess, (const void*)addr, data, (maxlen + 1) * 2, 0))
|
if(!memread(fdProcessInfo->hProcess, (const void*)addr, data, (maxlen + 1) * 2, 0))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,25 +1,48 @@
|
||||||
#ifndef _DYNAMICMEM_H
|
#ifndef _DYNAMICMEM_H
|
||||||
#define _DYNAMICMEM_H
|
#define _DYNAMICMEM_H
|
||||||
|
|
||||||
|
template<class T>
|
||||||
class Memory
|
class Memory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Memory(const char* reason = "Memory:???")
|
||||||
|
{
|
||||||
|
mPtr = 0;
|
||||||
|
mSize = 0;
|
||||||
|
mReason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
Memory(size_t size, const char* reason = "Memory:???")
|
Memory(size_t size, const char* reason = "Memory:???")
|
||||||
{
|
{
|
||||||
this->realloc(size, reason);
|
mPtr = reinterpret_cast<T>(emalloc(size));
|
||||||
|
mSize = size;
|
||||||
|
mReason = reason;
|
||||||
|
memset(mPtr, 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
~Memory()
|
~Memory()
|
||||||
{
|
{
|
||||||
efree(mPtr, mReason);
|
efree(mPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Memory realloc(size_t size, const char* reason = "Memory:???")
|
T realloc(size_t size, const char* reason = "Memory:???")
|
||||||
{
|
{
|
||||||
|
mPtr = reinterpret_cast<T>(erealloc(mPtr, size));
|
||||||
mSize = size;
|
mSize = size;
|
||||||
mPtr = erealloc(mPtr, size, reason);
|
|
||||||
mReason = reason;
|
mReason = reason;
|
||||||
return *this;
|
memset(mPtr, 0, size);
|
||||||
|
return mPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class U>
|
||||||
|
operator U()
|
||||||
|
{
|
||||||
|
return (U)mPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
operator T()
|
||||||
|
{
|
||||||
|
return mPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size()
|
size_t size()
|
||||||
|
@ -27,15 +50,8 @@ public:
|
||||||
return mSize;
|
return mSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
//return a typeless pointer
|
|
||||||
template<class T>
|
|
||||||
operator T* ()
|
|
||||||
{
|
|
||||||
return static_cast<T*>(mPtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* mPtr;
|
T mPtr;
|
||||||
size_t mSize;
|
size_t mSize;
|
||||||
const char* mReason;
|
const char* mReason;
|
||||||
};
|
};
|
||||||
|
|
|
@ -172,7 +172,7 @@ CMDRESULT cbInstrVarList(int argc, char* argv[])
|
||||||
dputs("no variables!");
|
dputs("no variables!");
|
||||||
return STATUS_CONTINUE;
|
return STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
VAR* variables = Memory(cbsize, "cbInstrVarList:variables");
|
Memory<VAR*> variables(cbsize, "cbInstrVarList:variables");
|
||||||
if(!varenum(variables, 0))
|
if(!varenum(variables, 0))
|
||||||
{
|
{
|
||||||
dputs("error listing variables!");
|
dputs("error listing variables!");
|
||||||
|
@ -182,12 +182,10 @@ CMDRESULT cbInstrVarList(int argc, char* argv[])
|
||||||
int varcount = (int)cbsize / sizeof(VAR);
|
int varcount = (int)cbsize / sizeof(VAR);
|
||||||
for(int i = 0; i < varcount; i++)
|
for(int i = 0; i < varcount; i++)
|
||||||
{
|
{
|
||||||
|
if(variables[i].alias.length())
|
||||||
|
continue;
|
||||||
char name[deflen] = "";
|
char name[deflen] = "";
|
||||||
strcpy(name, variables[i].name.c_str());
|
strcpy(name, variables[i].name.c_str());
|
||||||
int len = (int)strlen(name);
|
|
||||||
for(int j = 0; j < len; j++)
|
|
||||||
if(name[j] == 1)
|
|
||||||
name[j] = '/';
|
|
||||||
uint value = (uint)variables[i].value.u.value;
|
uint value = (uint)variables[i].value.u.value;
|
||||||
if(variables[i].type != VAR_HIDDEN)
|
if(variables[i].type != VAR_HIDDEN)
|
||||||
{
|
{
|
||||||
|
@ -923,9 +921,9 @@ CMDRESULT cbInstrGetstr(int argc, char* argv[])
|
||||||
dprintf("failed to get variable size \"%s\"!\n", argv[1]);
|
dprintf("failed to get variable size \"%s\"!\n", argv[1]);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
char* string = Memory(size + 1, "cbInstrGetstr:string");
|
Memory<char*> string(size + 1, "cbInstrGetstr:string");
|
||||||
memset(string, 0, size + 1);
|
memset(string, 0, size + 1);
|
||||||
if(!varget(argv[1], string, &size, 0))
|
if(!varget(argv[1], (char*)string, &size, 0))
|
||||||
{
|
{
|
||||||
dprintf("failed to get variable data \"%s\"!\n", argv[1]);
|
dprintf("failed to get variable data \"%s\"!\n", argv[1]);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
|
@ -958,9 +956,9 @@ CMDRESULT cbInstrCopystr(int argc, char* argv[])
|
||||||
dprintf("failed to get variable size \"%s\"!\n", argv[2]);
|
dprintf("failed to get variable size \"%s\"!\n", argv[2]);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
char* string = Memory(size + 1, "cbInstrGetstr:string");
|
Memory<char*> string(size + 1, "cbInstrGetstr:string");
|
||||||
memset(string, 0, size + 1);
|
memset(string, 0, size + 1);
|
||||||
if(!varget(argv[2], string, &size, 0))
|
if(!varget(argv[2], (char*)string, &size, 0))
|
||||||
{
|
{
|
||||||
dprintf("failed to get variable data \"%s\"!\n", argv[2]);
|
dprintf("failed to get variable data \"%s\"!\n", argv[2]);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
|
@ -1008,7 +1006,7 @@ CMDRESULT cbInstrFind(int argc, char* argv[])
|
||||||
dprintf("invalid memory address "fhex"!\n", addr);
|
dprintf("invalid memory address "fhex"!\n", addr);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
unsigned char* data = Memory(size, "cbInstrFind:data");
|
Memory<unsigned char*> data(size, "cbInstrFind:data");
|
||||||
if(!memread(fdProcessInfo->hProcess, (const void*)base, data, size, 0))
|
if(!memread(fdProcessInfo->hProcess, (const void*)base, data, size, 0))
|
||||||
{
|
{
|
||||||
dputs("failed to read memory!");
|
dputs("failed to read memory!");
|
||||||
|
@ -1060,7 +1058,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
||||||
dprintf("invalid memory address "fhex"!\n", addr);
|
dprintf("invalid memory address "fhex"!\n", addr);
|
||||||
return STATUS_ERROR;
|
return STATUS_ERROR;
|
||||||
}
|
}
|
||||||
unsigned char* data = Memory(size, "cbInstrFindAll:data");
|
Memory<unsigned char*> data(size, "cbInstrFindAll:data");
|
||||||
if(!memread(fdProcessInfo->hProcess, (const void*)base, data, size, 0))
|
if(!memread(fdProcessInfo->hProcess, (const void*)base, data, size, 0))
|
||||||
{
|
{
|
||||||
dputs("failed to read memory!");
|
dputs("failed to read memory!");
|
||||||
|
@ -1109,7 +1107,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
||||||
GuiReferenceSetCellContent(refCount, 0, msg);
|
GuiReferenceSetCellContent(refCount, 0, msg);
|
||||||
if(findData)
|
if(findData)
|
||||||
{
|
{
|
||||||
unsigned char* printData = Memory(patternsize, "cbInstrFindAll:printData");
|
Memory<unsigned char*> printData(patternsize, "cbInstrFindAll:printData");
|
||||||
memread(fdProcessInfo->hProcess, (const void*)result, printData, patternsize, 0);
|
memread(fdProcessInfo->hProcess, (const void*)result, printData, patternsize, 0);
|
||||||
for(int j = 0, k = 0; j < patternsize; j++)
|
for(int j = 0, k = 0; j < patternsize; j++)
|
||||||
{
|
{
|
||||||
|
@ -1194,7 +1192,7 @@ CMDRESULT cbInstrCommentList(int argc, char* argv[])
|
||||||
dputs("no comments");
|
dputs("no comments");
|
||||||
return STATUS_CONTINUE;
|
return STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
COMMENTSINFO* comments = Memory(cbsize, "cbInstrCommentList:comments");
|
Memory<COMMENTSINFO*> comments(cbsize, "cbInstrCommentList:comments");
|
||||||
commentenum(comments, 0);
|
commentenum(comments, 0);
|
||||||
int count = (int)(cbsize / sizeof(COMMENTSINFO));
|
int count = (int)(cbsize / sizeof(COMMENTSINFO));
|
||||||
for(int i = 0; i < count; i++)
|
for(int i = 0; i < count; i++)
|
||||||
|
@ -1229,7 +1227,7 @@ CMDRESULT cbInstrLabelList(int argc, char* argv[])
|
||||||
dputs("no labels");
|
dputs("no labels");
|
||||||
return STATUS_CONTINUE;
|
return STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
LABELSINFO* labels = Memory(cbsize, "cbInstrLabelList:labels");
|
Memory<LABELSINFO*> labels(cbsize, "cbInstrLabelList:labels");
|
||||||
labelenum(labels, 0);
|
labelenum(labels, 0);
|
||||||
int count = (int)(cbsize / sizeof(LABELSINFO));
|
int count = (int)(cbsize / sizeof(LABELSINFO));
|
||||||
for(int i = 0; i < count; i++)
|
for(int i = 0; i < count; i++)
|
||||||
|
@ -1263,7 +1261,7 @@ CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
|
||||||
dputs("no bookmarks");
|
dputs("no bookmarks");
|
||||||
return STATUS_CONTINUE;
|
return STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
BOOKMARKSINFO* bookmarks = Memory(cbsize, "cbInstrBookmarkList:bookmarks");
|
Memory<BOOKMARKSINFO*> bookmarks(cbsize, "cbInstrBookmarkList:bookmarks");
|
||||||
bookmarkenum(bookmarks, 0);
|
bookmarkenum(bookmarks, 0);
|
||||||
int count = (int)(cbsize / sizeof(BOOKMARKSINFO));
|
int count = (int)(cbsize / sizeof(BOOKMARKSINFO));
|
||||||
for(int i = 0; i < count; i++)
|
for(int i = 0; i < count; i++)
|
||||||
|
@ -1298,7 +1296,7 @@ CMDRESULT cbInstrFunctionList(int argc, char* argv[])
|
||||||
dputs("no functions");
|
dputs("no functions");
|
||||||
return STATUS_CONTINUE;
|
return STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
FUNCTIONSINFO* functions = Memory(cbsize, "cbInstrFunctionList:functions");
|
Memory<FUNCTIONSINFO*> functions(cbsize, "cbInstrFunctionList:functions");
|
||||||
functionenum(functions, 0);
|
functionenum(functions, 0);
|
||||||
int count = (int)(cbsize / sizeof(FUNCTIONSINFO));
|
int count = (int)(cbsize / sizeof(FUNCTIONSINFO));
|
||||||
for(int i = 0; i < count; i++)
|
for(int i = 0; i < count; i++)
|
||||||
|
@ -1344,7 +1342,7 @@ CMDRESULT cbInstrLoopList(int argc, char* argv[])
|
||||||
dputs("no loops");
|
dputs("no loops");
|
||||||
return STATUS_CONTINUE;
|
return STATUS_CONTINUE;
|
||||||
}
|
}
|
||||||
LOOPSINFO* loops = Memory(cbsize, "cbInstrLoopList:loops");
|
Memory<LOOPSINFO*> loops(cbsize, "cbInstrLoopList:loops");
|
||||||
loopenum(loops, 0);
|
loopenum(loops, 0);
|
||||||
int count = (int)(cbsize / sizeof(LOOPSINFO));
|
int count = (int)(cbsize / sizeof(LOOPSINFO));
|
||||||
for(int i = 0; i < count; i++)
|
for(int i = 0; i < count; i++)
|
||||||
|
|
|
@ -56,7 +56,7 @@ mathformat:
|
||||||
void mathformat(char* text)
|
void mathformat(char* text)
|
||||||
{
|
{
|
||||||
int len = (int)strlen(text);
|
int len = (int)strlen(text);
|
||||||
char* temp = Memory(len + 1, "mathformat:temp");
|
Memory<char*> temp(len + 1, "mathformat:temp");
|
||||||
memset(temp, 0, len + 1);
|
memset(temp, 0, len + 1);
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
if(mathisoperator(text[i]) < 3 or text[i] != text[i + 1])
|
if(mathisoperator(text[i]) < 3 or text[i] != text[i + 1])
|
||||||
|
@ -337,7 +337,8 @@ bool mathhandlebrackets(char* expression, bool silent, bool baseonly)
|
||||||
return true;
|
return true;
|
||||||
expstruct.total_pairs = total_pairs;
|
expstruct.total_pairs = total_pairs;
|
||||||
|
|
||||||
expstruct.pairs = Memory(expstruct.total_pairs * sizeof(BRACKET_PAIR), "mathhandlebrackets:expstruct.pairs");
|
Memory<BRACKET_PAIR*> pairs(expstruct.total_pairs * sizeof(BRACKET_PAIR), "mathhandlebrackets:expstruct.pairs");
|
||||||
|
expstruct.pairs = pairs;
|
||||||
memset(expstruct.pairs, 0, expstruct.total_pairs * sizeof(BRACKET_PAIR));
|
memset(expstruct.pairs, 0, expstruct.total_pairs * sizeof(BRACKET_PAIR));
|
||||||
matchpairs(&expstruct, expression, 0);
|
matchpairs(&expstruct, expression, 0);
|
||||||
int deepest = 0;
|
int deepest = 0;
|
||||||
|
@ -376,8 +377,8 @@ bool mathfromstring(const char* string, uint* value, bool silent, bool baseonly,
|
||||||
}
|
}
|
||||||
if(!highestop)
|
if(!highestop)
|
||||||
return valfromstring(string, value, silent, baseonly, value_size, isvar, 0);
|
return valfromstring(string, value, silent, baseonly, value_size, isvar, 0);
|
||||||
char* strleft = Memory(len + 1 + negative, "mathfromstring:strleft");
|
Memory<char*> strleft(len + 1 + negative, "mathfromstring:strleft");
|
||||||
char* strright = Memory(len + 1, "mathfromstring:strright");
|
Memory<char*> strright(len + 1, "mathfromstring:strright");
|
||||||
memset(strleft, 0, len + 1);
|
memset(strleft, 0, len + 1);
|
||||||
memset(strright, 0, len + 1);
|
memset(strright, 0, len + 1);
|
||||||
strncpy(strleft, string - negative, highestop_pos + negative);
|
strncpy(strleft, string - negative, highestop_pos + negative);
|
||||||
|
|
|
@ -79,7 +79,7 @@ void memupdatemap(HANDLE hProcess)
|
||||||
for(int k = 0; k < len; k++)
|
for(int k = 0; k < len; k++)
|
||||||
if(SectionName[k] == '\\' or SectionName[k] == '\"' or !isprint(SectionName[k]))
|
if(SectionName[k] == '\\' or SectionName[k] == '\"' or !isprint(SectionName[k]))
|
||||||
escape_count++;
|
escape_count++;
|
||||||
char* SectionNameEscaped = Memory(len + escape_count * 3 + 1, "_dbg_memmap:SectionNameEscaped");
|
Memory<char*> SectionNameEscaped(len + escape_count * 3 + 1, "_dbg_memmap:SectionNameEscaped");
|
||||||
memset(SectionNameEscaped, 0, len + escape_count * 3 + 1);
|
memset(SectionNameEscaped, 0, len + escape_count * 3 + 1);
|
||||||
for(int k = 0, l = 0; k < len; k++)
|
for(int k = 0, l = 0; k < len; k++)
|
||||||
{
|
{
|
||||||
|
@ -211,7 +211,7 @@ bool mempatch(HANDLE hProcess, void* lpBaseAddress, const void* lpBuffer, SIZE_T
|
||||||
{
|
{
|
||||||
if(!hProcess or !lpBaseAddress or !lpBuffer or !nSize) //generic failures
|
if(!hProcess or !lpBaseAddress or !lpBuffer or !nSize) //generic failures
|
||||||
return false;
|
return false;
|
||||||
unsigned char* olddata = Memory(nSize, "mempatch:olddata");
|
Memory<unsigned char*> olddata(nSize, "mempatch:olddata");
|
||||||
if(!memread(hProcess, lpBaseAddress, olddata, nSize, 0))
|
if(!memread(hProcess, lpBaseAddress, olddata, nSize, 0))
|
||||||
return memwrite(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten);
|
return memwrite(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten);
|
||||||
unsigned char* newdata = (unsigned char*)lpBuffer;
|
unsigned char* newdata = (unsigned char*)lpBuffer;
|
||||||
|
@ -240,7 +240,7 @@ static int formathexpattern(char* string)
|
||||||
{
|
{
|
||||||
int len = (int)strlen(string);
|
int len = (int)strlen(string);
|
||||||
_strupr(string);
|
_strupr(string);
|
||||||
char* new_string = Memory(len + 1, "formathexpattern:new_string");
|
Memory<char*> new_string(len + 1, "formathexpattern:new_string");
|
||||||
memset(new_string, 0, len + 1);
|
memset(new_string, 0, len + 1);
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
if(string[i] == '?' or isxdigit(string[i]))
|
if(string[i] == '?' or isxdigit(string[i]))
|
||||||
|
@ -257,7 +257,7 @@ static bool patterntransform(const char* text, std::vector<PATTERNBYTE>* pattern
|
||||||
int len = (int)strlen(text);
|
int len = (int)strlen(text);
|
||||||
if(!len)
|
if(!len)
|
||||||
return false;
|
return false;
|
||||||
char* newtext = Memory(len + 2, "transformpattern:newtext");
|
Memory<char*> newtext(len + 2, "transformpattern:newtext");
|
||||||
strcpy(newtext, text);
|
strcpy(newtext, text);
|
||||||
len = formathexpattern(newtext);
|
len = formathexpattern(newtext);
|
||||||
if(len % 2) //not a multiple of 2
|
if(len % 2) //not a multiple of 2
|
||||||
|
|
|
@ -31,7 +31,7 @@ int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent)
|
||||||
else
|
else
|
||||||
start_size = maxsize;
|
start_size = maxsize;
|
||||||
}
|
}
|
||||||
unsigned char* data = Memory(start_size, "reffind:data");
|
Memory<unsigned char*> data(start_size, "reffind:data");
|
||||||
if(!memread(fdProcessInfo->hProcess, (const void*)start_addr, data, start_size, 0))
|
if(!memread(fdProcessInfo->hProcess, (const void*)start_addr, data, start_size, 0))
|
||||||
{
|
{
|
||||||
if(!silent)
|
if(!silent)
|
||||||
|
|
|
@ -75,7 +75,7 @@ static bool scriptcreatelinemap(const char* filename)
|
||||||
GuiScriptError(0, "Empty script...");
|
GuiScriptError(0, "Empty script...");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
char* filedata = Memory(filesize + 1, "createlinemap:filedata");
|
Memory<char*> filedata(filesize + 1, "createlinemap:filedata");
|
||||||
memset(filedata, 0, filesize + 1);
|
memset(filedata, 0, filesize + 1);
|
||||||
DWORD read = 0;
|
DWORD read = 0;
|
||||||
if(!ReadFile(hFile, filedata, filesize, &read, 0))
|
if(!ReadFile(hFile, filedata, filesize, &read, 0))
|
||||||
|
|
|
@ -1050,11 +1050,11 @@ bool valapifromstring(const char* name, uint* value, int* value_size, bool print
|
||||||
int found = 0;
|
int found = 0;
|
||||||
int kernelbase = -1;
|
int kernelbase = -1;
|
||||||
DWORD cbNeeded = 0;
|
DWORD cbNeeded = 0;
|
||||||
uint* addrfound = 0;
|
Memory<uint*> addrfound;
|
||||||
if(EnumProcessModules(fdProcessInfo->hProcess, 0, 0, &cbNeeded))
|
if(EnumProcessModules(fdProcessInfo->hProcess, 0, 0, &cbNeeded))
|
||||||
{
|
{
|
||||||
addrfound = Memory(cbNeeded * sizeof(uint), "valapifromstring:addrfound");
|
addrfound.realloc(cbNeeded * sizeof(uint), "valapifromstring:addrfound");
|
||||||
HMODULE* hMods = Memory(cbNeeded * sizeof(HMODULE), "valapifromstring:hMods");
|
Memory<HMODULE*> hMods(cbNeeded * sizeof(HMODULE), "valapifromstring:hMods");
|
||||||
if(EnumProcessModules(fdProcessInfo->hProcess, hMods, cbNeeded, &cbNeeded))
|
if(EnumProcessModules(fdProcessInfo->hProcess, hMods, cbNeeded, &cbNeeded))
|
||||||
{
|
{
|
||||||
for(unsigned int i = 0; i < cbNeeded / sizeof(HMODULE); i++)
|
for(unsigned int i = 0; i < cbNeeded / sizeof(HMODULE); i++)
|
||||||
|
@ -1163,7 +1163,7 @@ bool valfromstring(const char* string, uint* value, bool silent, bool baseonly,
|
||||||
else if(mathcontains(string)) //handle math
|
else if(mathcontains(string)) //handle math
|
||||||
{
|
{
|
||||||
int len = (int)strlen(string);
|
int len = (int)strlen(string);
|
||||||
char* newstring = Memory(len * 2, "valfromstring:newstring");
|
Memory<char*> newstring(len * 2, "valfromstring:newstring");
|
||||||
if(strstr(string, "[")) //memory brackets: []
|
if(strstr(string, "[")) //memory brackets: []
|
||||||
{
|
{
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
|
@ -1183,7 +1183,7 @@ bool valfromstring(const char* string, uint* value, bool silent, bool baseonly,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strcpy(newstring, string);
|
strcpy(newstring, string);
|
||||||
char* string_ = Memory(len + 256, "valfromstring:string_");
|
Memory<char*> string_(len + 256, "valfromstring:string_");
|
||||||
strcpy(string_, newstring);
|
strcpy(string_, newstring);
|
||||||
int add = 0;
|
int add = 0;
|
||||||
bool negative = (*string_ == '-');
|
bool negative = (*string_ == '-');
|
||||||
|
@ -1217,7 +1217,7 @@ bool valfromstring(const char* string, uint* value, bool silent, bool baseonly,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
int len = (int)strlen(string);
|
int len = (int)strlen(string);
|
||||||
char* newstring = Memory(len * 2, "valfromstring:newstring");
|
Memory<char*> newstring(len * 2, "valfromstring:newstring");
|
||||||
if(strstr(string, "["))
|
if(strstr(string, "["))
|
||||||
{
|
{
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
|
@ -1326,7 +1326,6 @@ bool valfromstring(const char* string, uint* value, bool silent, bool baseonly,
|
||||||
sscanf(string + inc, "%"fext"x", value);
|
sscanf(string + inc, "%"fext"x", value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(baseonly)
|
if(baseonly)
|
||||||
return false;
|
return false;
|
||||||
else if(valapifromstring(string, value, value_size, true, silent, hexonly)) //then come APIs
|
else if(valapifromstring(string, value, value_size, true, silent, hexonly)) //then come APIs
|
||||||
|
@ -1374,7 +1373,7 @@ bool valtostring(const char* string, uint* value, bool silent)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
int len = (int)strlen(string);
|
int len = (int)strlen(string);
|
||||||
char* newstring = Memory(len * 2, "valfromstring:newstring");
|
Memory<char*> newstring(len * 2, "valfromstring:newstring");
|
||||||
if(strstr(string, "[")) //memory brackets: []
|
if(strstr(string, "[")) //memory brackets: []
|
||||||
{
|
{
|
||||||
for(int i = 0, j = 0; i < len; i++)
|
for(int i = 0, j = 0; i < len; i++)
|
||||||
|
@ -1427,7 +1426,7 @@ bool valtostring(const char* string, uint* value, bool silent)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool ok = setregister(string, *value);
|
bool ok = setregister(string, *value);
|
||||||
char* regName = Memory(strlen(string) + 1, "valtostring:regname");
|
Memory<char*> regName(strlen(string) + 1, "valtostring:regname");
|
||||||
strcpy(regName, string);
|
strcpy(regName, string);
|
||||||
_strlwr(regName);
|
_strlwr(regName);
|
||||||
if(strstr(regName, "ip"))
|
if(strstr(regName, "ip"))
|
||||||
|
|
Loading…
Reference in New Issue