DBG: remove CMDRESULT since it's become useless
This commit is contained in:
parent
37ff27c0b4
commit
94561bb255
|
@ -207,7 +207,7 @@ bool cbCommandProvider(char* cmd, int maxlen);
|
|||
|
||||
/**
|
||||
\brief Initiates the command loop. This function will not return until a command returns ::STATUS_EXIT.
|
||||
\return A CMDRESULT, will always be ::STATUS_EXIT.
|
||||
\return A bool, will always be ::STATUS_EXIT.
|
||||
*/
|
||||
void cmdloop()
|
||||
{
|
||||
|
@ -266,13 +266,13 @@ void cmdloop()
|
|||
\brief Directly execute a command.
|
||||
\param [in,out] cmd_list Command list.
|
||||
\param cmd The command to execute.
|
||||
\return A CMDRESULT.
|
||||
\return A bool.
|
||||
*/
|
||||
CMDRESULT cmddirectexec(const char* cmd)
|
||||
bool cmddirectexec(const char* cmd)
|
||||
{
|
||||
// Don't allow anyone to send in empty strings
|
||||
if(!cmd)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
StringList commands;
|
||||
StringUtils::Split(cmd, ';');
|
||||
|
@ -285,12 +285,12 @@ CMDRESULT cmddirectexec(const char* cmd)
|
|||
ExpressionParser parser(command);
|
||||
duint result;
|
||||
if(!parser.Calculate(result, valuesignedcalc(), true, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
varset("$ans", result, true);
|
||||
continue;
|
||||
}
|
||||
if(found->debugonly && !DbgIsDebugging())
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
Command cmdParsed(command);
|
||||
int argcount = cmdParsed.GetArgCount();
|
||||
char** argv = (char**)emalloc((argcount + 1) * sizeof(char*), "cmddirectexec:argv");
|
||||
|
@ -301,12 +301,12 @@ CMDRESULT cmddirectexec(const char* cmd)
|
|||
*argv[i + 1] = 0;
|
||||
strcpy_s(argv[i + 1], deflen, cmdParsed.GetArg(i).c_str());
|
||||
}
|
||||
CMDRESULT res = found->cbCommand(argcount + 1, argv);
|
||||
auto res = found->cbCommand(argcount + 1, argv);
|
||||
for(int i = 0; i < argcount; i++)
|
||||
efree(argv[i + 1], "cmddirectexec:argv[i+1]");
|
||||
efree(argv, "cmddirectexec:argv");
|
||||
if(res != STATUS_CONTINUE)
|
||||
return res;
|
||||
if(!res)
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -10,15 +10,7 @@ bool IsArgumentsLessThan(int argc, int minimumCount);
|
|||
|
||||
struct COMMAND;
|
||||
|
||||
enum CMDRESULT
|
||||
{
|
||||
STATUS_ERROR = false,
|
||||
STATUS_CONTINUE = true,
|
||||
STATUS_EXIT = 2,
|
||||
STATUS_PAUSE = 3
|
||||
};
|
||||
|
||||
typedef CMDRESULT(*CBCOMMAND)(int, char**);
|
||||
typedef bool(*CBCOMMAND)(int, char**);
|
||||
typedef bool (*CBCOMMANDPROVIDER)(char*, int);
|
||||
typedef COMMAND* (*CBCOMMANDFINDER)(char*);
|
||||
|
||||
|
@ -39,6 +31,6 @@ COMMAND* cmdget(const char* cmd);
|
|||
CBCOMMAND cmdset(const char* name, CBCOMMAND cbCommand, bool debugonly);
|
||||
bool cmddel(const char* name);
|
||||
void cmdloop();
|
||||
CMDRESULT cmddirectexec(const char* cmd);
|
||||
bool cmddirectexec(const char* cmd);
|
||||
|
||||
#endif // _COMMAND_H
|
||||
|
|
|
@ -133,20 +133,20 @@ void copyCommandLine(const char* cmdLine)
|
|||
strcpy_s(commandLine, cmdLine);
|
||||
}
|
||||
|
||||
CMDRESULT SetCommandLine()
|
||||
bool SetCommandLine()
|
||||
{
|
||||
cmdline_error_t cmdline_error = { (cmdline_error_type_t)0, 0 };
|
||||
|
||||
if(!dbgsetcmdline(commandLine, &cmdline_error))
|
||||
{
|
||||
showcommandlineerror(&cmdline_error);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
//update the memory map
|
||||
MemUpdateMap();
|
||||
GuiUpdateMemoryView();
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,6 @@ char* getCommandLineArgs();
|
|||
void CmdLineCacheSave(JSON Root);
|
||||
void CmdLineCacheLoad(JSON Root);
|
||||
void copyCommandLine(const char* cmdLine);
|
||||
CMDRESULT setCommandLine();
|
||||
bool setCommandLine();
|
||||
|
||||
#endif // _COMMANDLINE_H
|
|
@ -15,7 +15,7 @@
|
|||
#include "exception.h"
|
||||
#include "TraceRecord.h"
|
||||
|
||||
CMDRESULT cbInstrAnalyse(int argc, char* argv[])
|
||||
bool cbInstrAnalyse(int argc, char* argv[])
|
||||
{
|
||||
SELECTIONDATA sel;
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel);
|
||||
|
@ -25,10 +25,10 @@ CMDRESULT cbInstrAnalyse(int argc, char* argv[])
|
|||
anal.Analyse();
|
||||
anal.SetMarkers();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrExanalyse(int argc, char* argv[])
|
||||
bool cbInstrExanalyse(int argc, char* argv[])
|
||||
{
|
||||
SELECTIONDATA sel;
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel);
|
||||
|
@ -38,10 +38,10 @@ CMDRESULT cbInstrExanalyse(int argc, char* argv[])
|
|||
anal.Analyse();
|
||||
anal.SetMarkers();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCfanalyse(int argc, char* argv[])
|
||||
bool cbInstrCfanalyse(int argc, char* argv[])
|
||||
{
|
||||
bool exceptionDirectory = false;
|
||||
if(argc > 1)
|
||||
|
@ -54,10 +54,10 @@ CMDRESULT cbInstrCfanalyse(int argc, char* argv[])
|
|||
anal.Analyse();
|
||||
anal.SetMarkers();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAnalyseNukem(int argc, char* argv[])
|
||||
bool cbInstrAnalyseNukem(int argc, char* argv[])
|
||||
{
|
||||
SELECTIONDATA sel;
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel);
|
||||
|
@ -65,10 +65,10 @@ CMDRESULT cbInstrAnalyseNukem(int argc, char* argv[])
|
|||
duint base = MemFindBaseAddr(sel.start, &size);
|
||||
Analyse_nukem(base, size);
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAnalxrefs(int argc, char* argv[])
|
||||
bool cbInstrAnalxrefs(int argc, char* argv[])
|
||||
{
|
||||
SELECTIONDATA sel;
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel);
|
||||
|
@ -78,27 +78,27 @@ CMDRESULT cbInstrAnalxrefs(int argc, char* argv[])
|
|||
anal.Analyse();
|
||||
anal.SetMarkers();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAnalrecur(int argc, char* argv[])
|
||||
bool cbInstrAnalrecur(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint entry;
|
||||
if(!valfromstring(argv[1], &entry, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint size;
|
||||
auto base = MemFindBaseAddr(entry, &size);
|
||||
if(!base)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
RecursiveAnalysis analysis(base, size, entry, 0);
|
||||
analysis.Analyse();
|
||||
analysis.SetMarkers();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAnalyseadv(int argc, char* argv[])
|
||||
bool cbInstrAnalyseadv(int argc, char* argv[])
|
||||
{
|
||||
SELECTIONDATA sel;
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel);
|
||||
|
@ -108,23 +108,23 @@ CMDRESULT cbInstrAnalyseadv(int argc, char* argv[])
|
|||
anal.Analyse();
|
||||
anal.SetMarkers();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrVirtualmod(int argc, char* argv[])
|
||||
bool cbInstrVirtualmod(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint base;
|
||||
if(!valfromstring(argv[2], &base))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Invalid parameter [base]!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!MemIsValidReadPtr(base))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Invalid memory address!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint size;
|
||||
if(argc < 4)
|
||||
|
@ -132,13 +132,13 @@ CMDRESULT cbInstrVirtualmod(int argc, char* argv[])
|
|||
else if(!valfromstring(argv[3], &size))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Invalid parameter [size]"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto name = String("virtual:\\") + (argv[1]);
|
||||
if(!ModLoad(base, size, name.c_str()))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Failed to load module (ModLoad)..."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
char modname[256] = "";
|
||||
|
@ -147,10 +147,10 @@ CMDRESULT cbInstrVirtualmod(int argc, char* argv[])
|
|||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Virtual module \"%s\" loaded on %p[%p]!\n"), argv[1], base, size);
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugDownloadSymbol(int argc, char* argv[])
|
||||
bool cbDebugDownloadSymbol(int argc, char* argv[])
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "This may take very long, depending on your network connection and data in the debug directory..."));
|
||||
Memory<char*> szDefaultStore(MAX_SETTING_SIZE + 1);
|
||||
|
@ -165,26 +165,26 @@ CMDRESULT cbDebugDownloadSymbol(int argc, char* argv[])
|
|||
SymDownloadAllSymbols(szSymbolStore); //download symbols for all modules
|
||||
GuiSymbolRefreshCurrent();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Done! See symbol log for more information"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
//get some module information
|
||||
duint modbase = ModBaseFromName(argv[1]);
|
||||
if(!modbase)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid module \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
wchar_t wszModulePath[MAX_PATH] = L"";
|
||||
if(!GetModuleFileNameExW(fdProcessInfo->hProcess, (HMODULE)modbase, wszModulePath, MAX_PATH))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "GetModuleFileNameExA failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
wchar_t szOldSearchPath[MAX_PATH] = L"";
|
||||
if(!SafeSymGetSearchPathW(fdProcessInfo->hProcess, szOldSearchPath, MAX_PATH)) //backup current search path
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "SymGetSearchPath failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
char szServerSearchPath[MAX_PATH * 2] = "";
|
||||
if(argc > 2)
|
||||
|
@ -193,13 +193,13 @@ CMDRESULT cbDebugDownloadSymbol(int argc, char* argv[])
|
|||
if(!SafeSymSetSearchPathW(fdProcessInfo->hProcess, StringUtils::Utf8ToUtf16(szServerSearchPath).c_str())) //set new search path
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "SymSetSearchPath (1) failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!SafeSymUnloadModule64(fdProcessInfo->hProcess, (DWORD64)modbase)) //unload module
|
||||
{
|
||||
SafeSymSetSearchPathW(fdProcessInfo->hProcess, szOldSearchPath);
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "SymUnloadModule64 failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto symOptions = SafeSymGetOptions();
|
||||
SafeSymSetOptions(symOptions & ~SYMOPT_IGNORE_CVREC);
|
||||
|
@ -208,20 +208,20 @@ CMDRESULT cbDebugDownloadSymbol(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "SymLoadModuleEx failed!"));
|
||||
SafeSymSetOptions(symOptions);
|
||||
SafeSymSetSearchPathW(fdProcessInfo->hProcess, szOldSearchPath);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
SafeSymSetOptions(symOptions);
|
||||
if(!SafeSymSetSearchPathW(fdProcessInfo->hProcess, szOldSearchPath))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "SymSetSearchPathW (2) failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiSymbolRefreshCurrent();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Done! See symbol log for more information"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrImageinfo(int argc, char* argv[])
|
||||
bool cbInstrImageinfo(int argc, char* argv[])
|
||||
{
|
||||
duint mod;
|
||||
SHARED_ACQUIRE(LockModules);
|
||||
|
@ -234,20 +234,20 @@ CMDRESULT cbInstrImageinfo(int argc, char* argv[])
|
|||
if(!valfromstring(argv[1], &address))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "invalid argument"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
mod = MemFindBaseAddr(address, nullptr);
|
||||
if(mod == 0)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "invalid argument"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
info = ModInfoFromAddr(mod);
|
||||
if(info == nullptr)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "invalid argument"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto c = GetPE32DataFromMappedFile(info->fileMapVA, 0, UE_CHARACTERISTICS);
|
||||
auto dllc = GetPE32DataFromMappedFile(info->fileMapVA, 0, UE_DLLCHARACTERISTICS);
|
||||
|
@ -302,21 +302,21 @@ CMDRESULT cbInstrImageinfo(int argc, char* argv[])
|
|||
|
||||
dputs_untranslated("---------------");
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrGetRelocSize(int argc, char* argv[])
|
||||
bool cbInstrGetRelocSize(int argc, char* argv[])
|
||||
{
|
||||
//Original tool "GetRelocSize" by Killboy/SND
|
||||
if(argc < 2)
|
||||
{
|
||||
_plugin_logputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
duint RelocDirAddr;
|
||||
if(!valfromstring(argv[1], &RelocDirAddr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
duint RelocSize = 0;
|
||||
varset("$result", RelocSize, false);
|
||||
|
@ -326,7 +326,7 @@ CMDRESULT cbInstrGetRelocSize(int argc, char* argv[])
|
|||
if(!MemRead(RelocDirAddr, &RelocDir, sizeof(IMAGE_RELOCATION)))
|
||||
{
|
||||
_plugin_logputs(QT_TRANSLATE_NOOP("DBG", "Invalid relocation table!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!RelocDir.SymbolTableIndex)
|
||||
break;
|
||||
|
@ -338,13 +338,13 @@ CMDRESULT cbInstrGetRelocSize(int argc, char* argv[])
|
|||
if(!RelocSize)
|
||||
{
|
||||
_plugin_logputs(QT_TRANSLATE_NOOP("DBG", "Invalid relocation table!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
varset("$result", RelocSize, false);
|
||||
_plugin_logprintf(QT_TRANSLATE_NOOP("DBG", "Relocation table size: %X\n"), RelocSize);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void printExhandlers(const char* name, const std::vector<duint> & entries)
|
||||
|
@ -362,7 +362,7 @@ static void printExhandlers(const char* name, const std::vector<duint> & entries
|
|||
}
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrExhandlers(int argc, char* argv[])
|
||||
bool cbInstrExhandlers(int argc, char* argv[])
|
||||
{
|
||||
std::vector<duint> entries;
|
||||
#ifndef _WIN64
|
||||
|
@ -395,10 +395,10 @@ CMDRESULT cbInstrExhandlers(int argc, char* argv[])
|
|||
printExhandlers("UnhandledExceptionFilter", entries);
|
||||
else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Failed to get UnhandledExceptionFilter (loaded symbols for kernelbase.dll?)"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrExinfo(int argc, char* argv[])
|
||||
bool cbInstrExinfo(int argc, char* argv[])
|
||||
{
|
||||
auto info = getLastExceptionInfo();
|
||||
const auto & record = info.ExceptionRecord;
|
||||
|
@ -427,16 +427,16 @@ CMDRESULT cbInstrExinfo(int argc, char* argv[])
|
|||
else
|
||||
dprintf("ExceptionInformation[%02u]: %p\n", i, record.ExceptionInformation[i]);
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrTraceexecute(int argc, char* argv[])
|
||||
bool cbInstrTraceexecute(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
_dbg_dbgtraceexecute(addr);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,18 +2,18 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrAnalyse(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrExanalyse(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCfanalyse(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAnalyseNukem(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAnalxrefs(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAnalrecur(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAnalyseadv(int argc, char* argv[]);
|
||||
bool cbInstrAnalyse(int argc, char* argv[]);
|
||||
bool cbInstrExanalyse(int argc, char* argv[]);
|
||||
bool cbInstrCfanalyse(int argc, char* argv[]);
|
||||
bool cbInstrAnalyseNukem(int argc, char* argv[]);
|
||||
bool cbInstrAnalxrefs(int argc, char* argv[]);
|
||||
bool cbInstrAnalrecur(int argc, char* argv[]);
|
||||
bool cbInstrAnalyseadv(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrVirtualmod(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDownloadSymbol(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrImageinfo(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrGetRelocSize(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrExhandlers(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrExinfo(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrTraceexecute(int argc, char* argv[]);
|
||||
bool cbInstrVirtualmod(int argc, char* argv[]);
|
||||
bool cbDebugDownloadSymbol(int argc, char* argv[]);
|
||||
bool cbInstrImageinfo(int argc, char* argv[]);
|
||||
bool cbInstrGetRelocSize(int argc, char* argv[]);
|
||||
bool cbInstrExhandlers(int argc, char* argv[]);
|
||||
bool cbInstrExinfo(int argc, char* argv[]);
|
||||
bool cbInstrTraceexecute(int argc, char* argv[]);
|
File diff suppressed because it is too large
Load Diff
|
@ -2,26 +2,26 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugSetBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDeleteBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugEnableBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDisableBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetHardwareBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDeleteHardwareBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugEnableHardwareBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDisableHardwareBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetMemoryBpx(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDeleteMemoryBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugEnableMemoryBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDisableMemoryBreakpoint(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugBpDll(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugBcDll(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugBpDllEnable(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugBpDllDisable(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetExceptionBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDeleteExceptionBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugEnableExceptionBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDisableExceptionBPX(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPGoto(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugBplist(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXOptions(int argc, char* argv[]);
|
||||
bool cbDebugSetBPX(int argc, char* argv[]);
|
||||
bool cbDebugDeleteBPX(int argc, char* argv[]);
|
||||
bool cbDebugEnableBPX(int argc, char* argv[]);
|
||||
bool cbDebugDisableBPX(int argc, char* argv[]);
|
||||
bool cbDebugSetHardwareBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugDeleteHardwareBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugEnableHardwareBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugDisableHardwareBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugSetMemoryBpx(int argc, char* argv[]);
|
||||
bool cbDebugDeleteMemoryBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugEnableMemoryBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugDisableMemoryBreakpoint(int argc, char* argv[]);
|
||||
bool cbDebugBpDll(int argc, char* argv[]);
|
||||
bool cbDebugBcDll(int argc, char* argv[]);
|
||||
bool cbDebugBpDllEnable(int argc, char* argv[]);
|
||||
bool cbDebugBpDllDisable(int argc, char* argv[]);
|
||||
bool cbDebugSetExceptionBPX(int argc, char* argv[]);
|
||||
bool cbDebugDeleteExceptionBPX(int argc, char* argv[]);
|
||||
bool cbDebugEnableExceptionBPX(int argc, char* argv[]);
|
||||
bool cbDebugDisableExceptionBPX(int argc, char* argv[]);
|
||||
bool cbDebugSetBPGoto(int argc, char* argv[]);
|
||||
bool cbDebugBplist(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXOptions(int argc, char* argv[]);
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
#include "variable.h"
|
||||
#include "value.h"
|
||||
|
||||
static CMDRESULT cbDebugSetBPXTextCommon(BP_TYPE Type, int argc, char* argv[], const String & description, const std::function<bool(duint, BP_TYPE, const char*)> & setFunction)
|
||||
static bool cbDebugSetBPXTextCommon(BP_TYPE Type, int argc, char* argv[], const String & description, const std::function<bool(duint, BP_TYPE, const char*)> & setFunction)
|
||||
{
|
||||
BREAKPOINT bp;
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
char* value = "";
|
||||
if(argc > 2)
|
||||
value = argv[2];
|
||||
|
@ -17,452 +17,452 @@ static CMDRESULT cbDebugSetBPXTextCommon(BP_TYPE Type, int argc, char* argv[], c
|
|||
if(!BpGetAny(Type, argv[1], &bp))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "No such breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!setFunction(bp.addr, Type, value))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Can't set %s on breakpoint \"%s\"\n"), description.c_str(), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
DebugUpdateBreakpointsViewAsync();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXNameCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXNameCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXTextCommon(Type, argc, argv, String(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "breakpoint name"))), BpSetName);
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXConditionCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXConditionCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXTextCommon(Type, argc, argv, String(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "break condition"))), BpSetBreakCondition);
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXLogCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXLogCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXTextCommon(Type, argc, argv, String(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "logging text"))), BpSetLogText);
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXLogConditionCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXLogConditionCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXTextCommon(Type, argc, argv, String(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "logging condition"))), BpSetLogCondition);
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXCommandCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXCommandCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXTextCommon(Type, argc, argv, String(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "command on hit"))), BpSetCommandText);
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXCommandConditionCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXCommandConditionCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXTextCommon(Type, argc, argv, String(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "command condition"))), BpSetCommandCondition);
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXFastResumeCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXFastResumeCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
BREAKPOINT bp;
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto fastResume = true;
|
||||
if(argc > 2)
|
||||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[2], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
fastResume = value != 0;
|
||||
}
|
||||
if(!BpGetAny(Type, argv[1], &bp))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "No such breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!BpSetFastResume(bp.addr, Type, fastResume))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Can't set fast resume on breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
DebugUpdateBreakpointsViewAsync();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXSingleshootCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXSingleshootCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
BREAKPOINT bp;
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto singleshoot = true;
|
||||
if(argc > 2)
|
||||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[2], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
singleshoot = value != 0;
|
||||
}
|
||||
if(!BpGetAny(Type, argv[1], &bp))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "No such breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!BpSetSingleshoot(bp.addr, Type, singleshoot))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Can't set singleshoot on breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
DebugUpdateBreakpointsViewAsync();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugSetBPXSilentCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugSetBPXSilentCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
BREAKPOINT bp;
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto silent = true;
|
||||
if(argc > 2)
|
||||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[2], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
silent = value != 0;
|
||||
}
|
||||
if(!BpGetAny(Type, argv[1], &bp))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "No such breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!BpSetSilent(bp.addr, Type, silent))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Can't set silent on breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
DebugUpdateBreakpointsViewAsync();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugGetBPXHitCountCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugGetBPXHitCountCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
BREAKPOINT bp;
|
||||
if(!BpGetAny(Type, argv[1], &bp))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "No such breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
varset("$result", bp.hitcount, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
static CMDRESULT cbDebugResetBPXHitCountCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
static bool cbDebugResetBPXHitCountCommon(BP_TYPE Type, int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint value = 0;
|
||||
if(argc > 2)
|
||||
if(!valfromstring(argv[2], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
BREAKPOINT bp;
|
||||
if(!BpGetAny(Type, argv[1], &bp))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "No such breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!BpResetHitCount(bp.addr, Type, (uint32)value))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Can't set hit count on breakpoint \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
DebugUpdateBreakpointsViewAsync();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXName(int argc, char* argv[])
|
||||
bool cbDebugSetBPXName(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXNameCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXConditionCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXLog(int argc, char* argv[])
|
||||
bool cbDebugSetBPXLog(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXLogCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXLogCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogConditionCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXCommand(int argc, char* argv[])
|
||||
bool cbDebugSetBPXCommand(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXCommandCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXCommandCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandConditionCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXFastResume(int argc, char* argv[])
|
||||
bool cbDebugSetBPXFastResume(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXFastResumeCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXSingleshoot(int argc, char* argv[])
|
||||
bool cbDebugSetBPXSingleshoot(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSingleshootCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXSilent(int argc, char* argv[])
|
||||
bool cbDebugSetBPXSilent(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSilentCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetBPXHitCount(int argc, char* argv[])
|
||||
bool cbDebugGetBPXHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugGetBPXHitCountCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResetBPXHitCount(int argc, char* argv[])
|
||||
bool cbDebugResetBPXHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugResetBPXHitCountCommon(BPNORMAL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareName(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareName(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXNameCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXConditionCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareLog(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareLog(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareLogCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareLogCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogConditionCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareCommand(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareCommand(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareCommandCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareCommandCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandConditionCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareFastResume(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareFastResume(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXFastResumeCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareSingleshoot(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareSingleshoot(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSingleshootCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareSilent(int argc, char* argv[])
|
||||
bool cbDebugSetBPXHardwareSilent(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSilentCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetBPXHardwareHitCount(int argc, char* argv[])
|
||||
bool cbDebugGetBPXHardwareHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugGetBPXHitCountCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResetBPXHardwareHitCount(int argc, char* argv[])
|
||||
bool cbDebugResetBPXHardwareHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugResetBPXHitCountCommon(BPHARDWARE, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryName(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryName(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXNameCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXConditionCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryLog(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryLog(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryLogCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryLogCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogConditionCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryCommand(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryCommand(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryCommandCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryCommandCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandConditionCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryFastResume(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemoryFastResume(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXFastResumeCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemorySingleshoot(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemorySingleshoot(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSingleshootCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemorySilent(int argc, char* argv[])
|
||||
bool cbDebugSetBPXMemorySilent(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSilentCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetBPXMemoryHitCount(int argc, char* argv[])
|
||||
bool cbDebugGetBPXMemoryHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugGetBPXHitCountCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResetBPXMemoryHitCount(int argc, char* argv[])
|
||||
bool cbDebugResetBPXMemoryHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugResetBPXHitCountCommon(BPMEMORY, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLName(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLName(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXNameCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXConditionCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLLog(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLLog(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLLogCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLLogCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogConditionCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLCommand(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLCommand(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLCommandCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLCommandCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandConditionCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLFastResume(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLFastResume(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXFastResumeCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLSingleshoot(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLSingleshoot(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSingleshootCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLSilent(int argc, char* argv[])
|
||||
bool cbDebugSetBPXDLLSilent(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSilentCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetBPXDLLHitCount(int argc, char* argv[])
|
||||
bool cbDebugGetBPXDLLHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugGetBPXHitCountCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResetBPXDLLHitCount(int argc, char* argv[])
|
||||
bool cbDebugResetBPXDLLHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugResetBPXHitCountCommon(BPDLL, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionName(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionName(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXNameCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXConditionCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionLog(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionLog(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionLogCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionLogCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXLogConditionCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionCommand(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionCommand(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionCommandCondition(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionCommandCondition(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXCommandConditionCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionFastResume(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionFastResume(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXFastResumeCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionSingleshoot(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionSingleshoot(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSingleshootCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionSilent(int argc, char* argv[])
|
||||
bool cbDebugSetBPXExceptionSilent(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugSetBPXSilentCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetBPXExceptionHitCount(int argc, char* argv[])
|
||||
bool cbDebugGetBPXExceptionHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugGetBPXHitCountCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResetBPXExceptionHitCount(int argc, char* argv[])
|
||||
bool cbDebugResetBPXExceptionHitCount(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugResetBPXHitCountCommon(BPEXCEPTION, argc, argv);
|
||||
}
|
|
@ -2,62 +2,62 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugSetBPXName(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXLog(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXLogCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXCommand(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXCommandCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXFastResume(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXSingleshoot(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXSilent(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetBPXHitCount(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResetBPXHitCount(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXName(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXLog(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXLogCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXCommand(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXCommandCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXFastResume(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXSingleshoot(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXSilent(int argc, char* argv[]);
|
||||
bool cbDebugGetBPXHitCount(int argc, char* argv[]);
|
||||
bool cbDebugResetBPXHitCount(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugSetBPXHardwareName(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareLog(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareLogCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareCommand(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareCommandCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareFastResume(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareSingleshoot(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXHardwareSilent(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetBPXHardwareHitCount(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResetBPXHardwareHitCount(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareName(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareLog(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareLogCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareCommand(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareCommandCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareFastResume(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareSingleshoot(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXHardwareSilent(int argc, char* argv[]);
|
||||
bool cbDebugGetBPXHardwareHitCount(int argc, char* argv[]);
|
||||
bool cbDebugResetBPXHardwareHitCount(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugSetBPXMemoryName(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemoryCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemoryLog(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemoryLogCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemoryCommand(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemoryCommandCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemoryFastResume(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemorySingleshoot(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXMemorySilent(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetBPXMemoryHitCount(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResetBPXMemoryHitCount(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryName(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryLog(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryLogCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryCommand(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryCommandCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemoryFastResume(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemorySingleshoot(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXMemorySilent(int argc, char* argv[]);
|
||||
bool cbDebugGetBPXMemoryHitCount(int argc, char* argv[]);
|
||||
bool cbDebugResetBPXMemoryHitCount(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugSetBPXDLLName(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLLog(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLLogCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLCommand(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLCommandCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLFastResume(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLSingleshoot(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXDLLSilent(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetBPXDLLHitCount(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResetBPXDLLHitCount(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLName(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLLog(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLLogCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLCommand(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLCommandCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLFastResume(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLSingleshoot(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXDLLSilent(int argc, char* argv[]);
|
||||
bool cbDebugGetBPXDLLHitCount(int argc, char* argv[]);
|
||||
bool cbDebugResetBPXDLLHitCount(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugSetBPXExceptionName(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionLog(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionLogCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionCommand(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionCommandCondition(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionFastResume(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionSingleshoot(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetBPXExceptionSilent(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetBPXExceptionHitCount(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResetBPXExceptionHitCount(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionName(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionLog(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionLogCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionCommand(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionCommandCondition(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionFastResume(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionSingleshoot(int argc, char* argv[]);
|
||||
bool cbDebugSetBPXExceptionSilent(int argc, char* argv[]);
|
||||
bool cbDebugGetBPXExceptionHitCount(int argc, char* argv[]);
|
||||
bool cbDebugResetBPXExceptionHitCount(int argc, char* argv[]);
|
|
@ -9,21 +9,21 @@
|
|||
#include "plugin_loader.h"
|
||||
#include "value.h"
|
||||
|
||||
CMDRESULT cbDebugRunInternal(int argc, char* argv[])
|
||||
bool cbDebugRunInternal(int argc, char* argv[])
|
||||
{
|
||||
// Don't "run" twice if the program is already running
|
||||
if(dbgisrunning())
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
dbgsetispausedbyuser(false);
|
||||
GuiSetDebugStateAsync(running);
|
||||
unlock(WAITID_RUN);
|
||||
PLUG_CB_RESUMEDEBUG callbackInfo;
|
||||
callbackInfo.reserved = 0;
|
||||
plugincbcall(CB_RESUMEDEBUG, &callbackInfo);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugInit(int argc, char* argv[])
|
||||
bool cbDebugInit(int argc, char* argv[])
|
||||
{
|
||||
cbDebugStop(argc, argv);
|
||||
|
||||
|
@ -31,7 +31,7 @@ CMDRESULT cbDebugInit(int argc, char* argv[])
|
|||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
strcpy_s(arg1, argv[1]);
|
||||
char szResolvedPath[MAX_PATH] = "";
|
||||
|
@ -43,13 +43,13 @@ CMDRESULT cbDebugInit(int argc, char* argv[])
|
|||
if(!FileExists(arg1))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "File does not exist!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
Handle hFile = CreateFileW(StringUtils::Utf8ToUtf16(arg1).c_str(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
|
||||
if(hFile == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Could not open file!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GetFileNameFromHandle(hFile, arg1); //get full path of the file
|
||||
hFile.Close();
|
||||
|
@ -59,7 +59,7 @@ CMDRESULT cbDebugInit(int argc, char* argv[])
|
|||
{
|
||||
case invalid:
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Invalid PE file!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
#ifdef _WIN64
|
||||
case x32:
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Use x32dbg to debug this file!"));
|
||||
|
@ -67,7 +67,7 @@ CMDRESULT cbDebugInit(int argc, char* argv[])
|
|||
case x64:
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Use x64dbg to debug this file!"));
|
||||
#endif //_WIN64
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
case dotnet:
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "This file is a dotNET application."));
|
||||
break;
|
||||
|
@ -103,10 +103,10 @@ CMDRESULT cbDebugInit(int argc, char* argv[])
|
|||
if(*currentfolder)
|
||||
init.currentfolder = currentfolder;
|
||||
CloseHandle(CreateThread(0, 0, threadDebugLoop, &init, 0, 0));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugStop(int argc, char* argv[])
|
||||
bool cbDebugStop(int argc, char* argv[])
|
||||
{
|
||||
// HACK: TODO: Don't kill script on debugger ending a process
|
||||
//scriptreset(); //reset the currently-loaded script
|
||||
|
@ -123,29 +123,29 @@ CMDRESULT cbDebugStop(int argc, char* argv[])
|
|||
if(CurrentTick - BeginTick > 10000)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "The debuggee does not stop after 10 seconds. The debugger state may be corrupted."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(CurrentTick - BeginTick >= 300)
|
||||
TerminateProcess(fdProcessInfo->hProcess, -1);
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugAttach(int argc, char* argv[])
|
||||
bool cbDebugAttach(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint pid = 0;
|
||||
if(!valfromstring(argv[1], &pid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(argc > 2)
|
||||
{
|
||||
duint eventHandle = 0;
|
||||
if(!valfromstring(argv[2], &eventHandle, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
dbgsetattachevent((HANDLE)eventHandle);
|
||||
}
|
||||
if(DbgIsDebugging())
|
||||
|
@ -154,13 +154,13 @@ CMDRESULT cbDebugAttach(int argc, char* argv[])
|
|||
if(!hProcess)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Could not open process %X!\n"), DWORD(pid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
BOOL wow64 = false, mewow64 = false;
|
||||
if(!IsWow64Process(hProcess, &wow64) || !IsWow64Process(GetCurrentProcess(), &mewow64))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "IsWow64Process failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if((mewow64 && !wow64) || (!mewow64 && wow64))
|
||||
{
|
||||
|
@ -169,35 +169,35 @@ CMDRESULT cbDebugAttach(int argc, char* argv[])
|
|||
#else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Use x64dbg to debug this process!"));
|
||||
#endif // _WIN64
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
wchar_t wszFileName[MAX_PATH] = L"";
|
||||
if(!GetModuleFileNameExW(hProcess, 0, wszFileName, MAX_PATH))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Could not get module filename %X!\n"), DWORD(pid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
strcpy_s(szFileName, StringUtils::Utf16ToUtf8(wszFileName).c_str());
|
||||
CloseHandle(CreateThread(0, 0, threadAttachLoop, (void*)pid, 0, 0));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugDetach(int argc, char* argv[])
|
||||
bool cbDebugDetach(int argc, char* argv[])
|
||||
{
|
||||
unlock(WAITID_RUN); //run
|
||||
dbgsetisdetachedbyuser(true); //detach when paused
|
||||
StepInto((void*)cbDetach);
|
||||
DebugBreakProcess(fdProcessInfo->hProcess);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugRun(int argc, char* argv[])
|
||||
bool cbDebugRun(int argc, char* argv[])
|
||||
{
|
||||
HistoryClear();
|
||||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugErun(int argc, char* argv[])
|
||||
bool cbDebugErun(int argc, char* argv[])
|
||||
{
|
||||
HistoryClear();
|
||||
if(!dbgisrunning())
|
||||
|
@ -205,38 +205,38 @@ CMDRESULT cbDebugErun(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dbgsetskipexceptions(false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSerun(int argc, char* argv[])
|
||||
bool cbDebugSerun(int argc, char* argv[])
|
||||
{
|
||||
cbDebugContinue(argc, argv);
|
||||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugPause(int argc, char* argv[])
|
||||
bool cbDebugPause(int argc, char* argv[])
|
||||
{
|
||||
if(_dbg_isanimating())
|
||||
{
|
||||
_dbg_animatestop(); // pause when animating
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
if(!DbgIsDebugging())
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not debugging!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!dbgisrunning())
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Program is not running"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(SuspendThread(hActiveThread) == -1)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error suspending thread"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint CIP = GetContextDataEx(hActiveThread, UE_CIP);
|
||||
if(!SetBPX(CIP, UE_BREAKPOINT, (void*)cbPauseBreakpoint))
|
||||
|
@ -245,20 +245,20 @@ CMDRESULT cbDebugPause(int argc, char* argv[])
|
|||
if(ResumeThread(hActiveThread) == -1)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error resuming thread"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dbgsetispausedbyuser(true);
|
||||
if(ResumeThread(hActiveThread) == -1)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error resuming thread"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugContinue(int argc, char* argv[])
|
||||
bool cbDebugContinue(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
|
@ -270,7 +270,7 @@ CMDRESULT cbDebugContinue(int argc, char* argv[])
|
|||
SetNextDbgContinueStatus(DBG_EXCEPTION_NOT_HANDLED);
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Exception will be thrown in the program"));
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool skipInt3Stepping(int argc, char* argv[])
|
||||
|
@ -289,10 +289,10 @@ static bool skipInt3Stepping(int argc, char* argv[])
|
|||
return false;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugStepInto(int argc, char* argv[])
|
||||
bool cbDebugStepInto(int argc, char* argv[])
|
||||
{
|
||||
if(skipInt3Stepping(argc, argv))
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
StepInto((void*)cbStep);
|
||||
// History
|
||||
HistoryAdd();
|
||||
|
@ -300,22 +300,22 @@ CMDRESULT cbDebugStepInto(int argc, char* argv[])
|
|||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugeStepInto(int argc, char* argv[])
|
||||
bool cbDebugeStepInto(int argc, char* argv[])
|
||||
{
|
||||
dbgsetskipexceptions(true);
|
||||
return cbDebugStepInto(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugseStepInto(int argc, char* argv[])
|
||||
bool cbDebugseStepInto(int argc, char* argv[])
|
||||
{
|
||||
cbDebugContinue(argc, argv);
|
||||
return cbDebugStepInto(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugStepOver(int argc, char* argv[])
|
||||
bool cbDebugStepOver(int argc, char* argv[])
|
||||
{
|
||||
if(skipInt3Stepping(argc, argv))
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
StepOver((void*)cbStep);
|
||||
// History
|
||||
HistoryClear();
|
||||
|
@ -323,19 +323,19 @@ CMDRESULT cbDebugStepOver(int argc, char* argv[])
|
|||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugeStepOver(int argc, char* argv[])
|
||||
bool cbDebugeStepOver(int argc, char* argv[])
|
||||
{
|
||||
dbgsetskipexceptions(true);
|
||||
return cbDebugStepOver(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugseStepOver(int argc, char* argv[])
|
||||
bool cbDebugseStepOver(int argc, char* argv[])
|
||||
{
|
||||
cbDebugContinue(argc, argv);
|
||||
return cbDebugStepOver(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSingleStep(int argc, char* argv[])
|
||||
bool cbDebugSingleStep(int argc, char* argv[])
|
||||
{
|
||||
duint stepcount = 1;
|
||||
if(argc > 1)
|
||||
|
@ -347,26 +347,26 @@ CMDRESULT cbDebugSingleStep(int argc, char* argv[])
|
|||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugeSingleStep(int argc, char* argv[])
|
||||
bool cbDebugeSingleStep(int argc, char* argv[])
|
||||
{
|
||||
dbgsetskipexceptions(true);
|
||||
return cbDebugSingleStep(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugStepOut(int argc, char* argv[])
|
||||
bool cbDebugStepOut(int argc, char* argv[])
|
||||
{
|
||||
HistoryClear();
|
||||
StepOver((void*)cbRtrStep);
|
||||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugeStepOut(int argc, char* argv[])
|
||||
bool cbDebugeStepOut(int argc, char* argv[])
|
||||
{
|
||||
dbgsetskipexceptions(true);
|
||||
return cbDebugStepOut(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSkip(int argc, char* argv[])
|
||||
bool cbDebugSkip(int argc, char* argv[])
|
||||
{
|
||||
SetNextDbgContinueStatus(DBG_CONTINUE); //swallow the exception
|
||||
duint cip = GetContextDataEx(hActiveThread, UE_CIP);
|
||||
|
@ -376,12 +376,12 @@ CMDRESULT cbDebugSkip(int argc, char* argv[])
|
|||
cip += basicinfo.size;
|
||||
SetContextDataEx(hActiveThread, UE_CIP, cip);
|
||||
DebugUpdateGuiAsync(cip, false); //update GUI
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrInstrUndo(int argc, char* argv[])
|
||||
bool cbInstrInstrUndo(int argc, char* argv[])
|
||||
{
|
||||
HistoryRestore();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,25 +2,25 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugRunInternal(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugInit(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugStop(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugAttach(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDetach(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugRun(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugErun(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSerun(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugPause(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugContinue(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugStepInto(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugeStepInto(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugseStepInto(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugStepOver(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugeStepOver(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugseStepOver(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSingleStep(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugeSingleStep(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugStepOut(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugeStepOut(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSkip(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrInstrUndo(int argc, char* argv[]);
|
||||
bool cbDebugRunInternal(int argc, char* argv[]);
|
||||
bool cbDebugInit(int argc, char* argv[]);
|
||||
bool cbDebugStop(int argc, char* argv[]);
|
||||
bool cbDebugAttach(int argc, char* argv[]);
|
||||
bool cbDebugDetach(int argc, char* argv[]);
|
||||
bool cbDebugRun(int argc, char* argv[]);
|
||||
bool cbDebugErun(int argc, char* argv[]);
|
||||
bool cbDebugSerun(int argc, char* argv[]);
|
||||
bool cbDebugPause(int argc, char* argv[]);
|
||||
bool cbDebugContinue(int argc, char* argv[]);
|
||||
bool cbDebugStepInto(int argc, char* argv[]);
|
||||
bool cbDebugeStepInto(int argc, char* argv[]);
|
||||
bool cbDebugseStepInto(int argc, char* argv[]);
|
||||
bool cbDebugStepOver(int argc, char* argv[]);
|
||||
bool cbDebugeStepOver(int argc, char* argv[]);
|
||||
bool cbDebugseStepOver(int argc, char* argv[]);
|
||||
bool cbDebugSingleStep(int argc, char* argv[]);
|
||||
bool cbDebugeSingleStep(int argc, char* argv[]);
|
||||
bool cbDebugStepOut(int argc, char* argv[]);
|
||||
bool cbDebugeStepOut(int argc, char* argv[]);
|
||||
bool cbDebugSkip(int argc, char* argv[]);
|
||||
bool cbInstrInstrUndo(int argc, char* argv[]);
|
|
@ -5,7 +5,7 @@
|
|||
#include "_scriptapi_stack.h"
|
||||
#include "debugger.h"
|
||||
|
||||
static CMDRESULT ReadWriteVariable(const char* varname, const std::function<CMDRESULT(duint*, int)> & callback)
|
||||
static bool ReadWriteVariable(const char* varname, const std::function<bool(duint*, int)> & callback)
|
||||
{
|
||||
duint set_value = 0;
|
||||
bool isvar;
|
||||
|
@ -13,10 +13,10 @@ static CMDRESULT ReadWriteVariable(const char* varname, const std::function<CMDR
|
|||
if(!valfromstring(varname, &set_value, true, true, &varsize, &isvar))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid variable \"%s\"\n"), varname);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
CMDRESULT retVal = callback(&set_value, varsize);
|
||||
if(retVal != STATUS_CONTINUE)
|
||||
bool retVal = callback(&set_value, varsize);
|
||||
if(retVal != true)
|
||||
return retVal;
|
||||
duint temp = 0;
|
||||
valfromstring(varname, &temp, true, true, 0, nullptr, 0); //there is no return check on this because the destination might not exist yet
|
||||
|
@ -28,94 +28,94 @@ static CMDRESULT ReadWriteVariable(const char* varname, const std::function<CMDR
|
|||
if(valfromstring(varname, &value)) //if the var is a value already it's an invalid destination
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid variable \"%s\"\n"), varname);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
varnew(varname, set_value, VAR_USER);
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrInc(int argc, char* argv[])
|
||||
bool cbInstrInc(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s++", argv[1]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDec(int argc, char* argv[])
|
||||
bool cbInstrDec(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s--", argv[1]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAdd(int argc, char* argv[])
|
||||
bool cbInstrAdd(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s+=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSub(int argc, char* argv[])
|
||||
bool cbInstrSub(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s-=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrMul(int argc, char* argv[])
|
||||
bool cbInstrMul(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s*=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDiv(int argc, char* argv[])
|
||||
bool cbInstrDiv(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s/=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAnd(int argc, char* argv[])
|
||||
bool cbInstrAnd(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s&=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrOr(int argc, char* argv[])
|
||||
bool cbInstrOr(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s|=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrXor(int argc, char* argv[])
|
||||
bool cbInstrXor(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s^=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrNeg(int argc, char* argv[])
|
||||
bool cbInstrNeg(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s=-%s", argv[1], argv[1]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrNot(int argc, char* argv[])
|
||||
bool cbInstrNot(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return cmddirectexec(StringUtils::sprintf("%s=~%s", argv[1], argv[1]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBswap(int argc, char* argv[])
|
||||
bool cbInstrBswap(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return ReadWriteVariable(argv[1], [](duint * value, int size)
|
||||
{
|
||||
if(size == 2)
|
||||
|
@ -129,17 +129,17 @@ CMDRESULT cbInstrBswap(int argc, char* argv[])
|
|||
else if(size != 1)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Variable size not supported."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRol(int argc, char* argv[])
|
||||
bool cbInstrRol(int argc, char* argv[])
|
||||
{
|
||||
duint value2;
|
||||
if(IsArgumentsLessThan(argc, 3) || !valfromstring(argv[2], &value2, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return ReadWriteVariable(argv[1], [value2](duint * value, int size)
|
||||
{
|
||||
if(size == 1)
|
||||
|
@ -155,17 +155,17 @@ CMDRESULT cbInstrRol(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Variable size not supported."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRor(int argc, char* argv[])
|
||||
bool cbInstrRor(int argc, char* argv[])
|
||||
{
|
||||
duint value2;
|
||||
if(IsArgumentsLessThan(argc, 3) || !valfromstring(argv[2], &value2, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
return ReadWriteVariable(argv[1], [value2](duint * value, int size)
|
||||
{
|
||||
if(size == 1)
|
||||
|
@ -181,24 +181,24 @@ CMDRESULT cbInstrRor(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Variable size not supported."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrShl(int argc, char* argv[])
|
||||
bool cbInstrShl(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
//SHL and SAL have the same semantics
|
||||
return cmddirectexec(StringUtils::sprintf("%s<<=%s", argv[1], argv[2]).c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrShr(int argc, char* argv[])
|
||||
bool cbInstrShr(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto oldType = valuesignedcalc();
|
||||
valuesetsignedcalc(false); //SHR is unsigned
|
||||
auto result = cmddirectexec(StringUtils::sprintf("%s>>=%s", argv[1], argv[2]).c_str());
|
||||
|
@ -206,10 +206,10 @@ CMDRESULT cbInstrShr(int argc, char* argv[])
|
|||
return result;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSar(int argc, char* argv[])
|
||||
bool cbInstrSar(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto oldType = valuesignedcalc();
|
||||
valuesetsignedcalc(true); //SAR is signed
|
||||
auto result = cmddirectexec(StringUtils::sprintf("%s>>=%s", argv[1], argv[2]).c_str());
|
||||
|
@ -217,27 +217,27 @@ CMDRESULT cbInstrSar(int argc, char* argv[])
|
|||
return result;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrPush(int argc, char* argv[])
|
||||
bool cbInstrPush(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint value;
|
||||
if(!valfromstring(argv[1], &value))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid argument \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
Script::Stack::Push(value);
|
||||
duint csp = GetContextDataEx(hActiveThread, UE_CSP);
|
||||
DebugUpdateStack(csp, csp);
|
||||
GuiUpdateRegisterView();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrPop(int argc, char* argv[])
|
||||
bool cbInstrPop(int argc, char* argv[])
|
||||
{
|
||||
duint value = Script::Stack::Pop();
|
||||
duint csp = GetContextDataEx(hActiveThread, UE_CSP);
|
||||
|
@ -246,22 +246,22 @@ CMDRESULT cbInstrPop(int argc, char* argv[])
|
|||
if(argc > 1)
|
||||
{
|
||||
if(!valtostring(argv[1], value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrTest(int argc, char* argv[])
|
||||
bool cbInstrTest(int argc, char* argv[])
|
||||
{
|
||||
//TODO: test
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint arg1 = 0;
|
||||
if(!valfromstring(argv[1], &arg1, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint arg2 = 0;
|
||||
if(!valfromstring(argv[2], &arg2, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint ezflag;
|
||||
duint bsflag = 0;
|
||||
if(!(arg1 & arg2))
|
||||
|
@ -271,19 +271,19 @@ CMDRESULT cbInstrTest(int argc, char* argv[])
|
|||
varset("$_EZ_FLAG", ezflag, true);
|
||||
varset("$_BS_FLAG", bsflag, true);
|
||||
//dprintf(QT_TRANSLATE_NOOP("DBG", "$_EZ_FLAG=%d, $_BS_FLAG=%d\n"), ezflag, bsflag);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCmp(int argc, char* argv[])
|
||||
bool cbInstrCmp(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint arg1 = 0;
|
||||
if(!valfromstring(argv[1], &arg1, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint arg2 = 0;
|
||||
if(!valfromstring(argv[2], &arg2, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint ezflag;
|
||||
duint bsflag;
|
||||
if(arg1 == arg2)
|
||||
|
@ -307,13 +307,13 @@ CMDRESULT cbInstrCmp(int argc, char* argv[])
|
|||
varset("$_EZ_FLAG", ezflag, true);
|
||||
varset("$_BS_FLAG", bsflag, true);
|
||||
//dprintf(QT_TRANSLATE_NOOP("DBG", "$_EZ_FLAG=%d, $_BS_FLAG=%d\n"), ezflag, bsflag);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrMov(int argc, char* argv[])
|
||||
bool cbInstrMov(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
String srcText = argv[2];
|
||||
if(srcText[0] == '#' && srcText[srcText.length() - 1] == '#') //handle mov addr, #DATA#
|
||||
{
|
||||
|
@ -323,14 +323,14 @@ CMDRESULT cbInstrMov(int argc, char* argv[])
|
|||
if(len % 2)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid hex string \"%s\" (length not divisible by 2)\n"), dataText.c_str());
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
for(int i = 0; i < len; i++)
|
||||
{
|
||||
if(!isxdigit(dataText[i]))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid hex string \"%s\" (contains invalid characters)\n"), dataText.c_str());
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//Check the destination
|
||||
|
@ -338,7 +338,7 @@ CMDRESULT cbInstrMov(int argc, char* argv[])
|
|||
if(!valfromstring(argv[1], &dest) || !MemIsValidReadPtr(dest))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid destination \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//Convert text to byte array (very ugly)
|
||||
Memory<unsigned char*> data(len / 2);
|
||||
|
@ -351,7 +351,7 @@ CMDRESULT cbInstrMov(int argc, char* argv[])
|
|||
if(sscanf_s(b, "%X", &res) != 1)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid hex byte \"%s\"\n"), b);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
data()[j] = res;
|
||||
}
|
||||
|
@ -359,10 +359,10 @@ CMDRESULT cbInstrMov(int argc, char* argv[])
|
|||
if(!MemWrite(dest, data(), data.size()))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to write to %p\n"), dest);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiUpdateAllViews(); //refresh disassembly/dump/etc
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -370,7 +370,7 @@ CMDRESULT cbInstrMov(int argc, char* argv[])
|
|||
if(!valfromstring(srcText.c_str(), &set_value))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid src \"%s\"\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
bool isvar = false;
|
||||
duint temp = 0;
|
||||
|
@ -383,10 +383,10 @@ CMDRESULT cbInstrMov(int argc, char* argv[])
|
|||
if(valfromstring(argv[1], &value)) //if the var is a value already it's an invalid destination
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid dest \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
varnew(argv[1], set_value, VAR_USER);
|
||||
}
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,25 +2,25 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrInc(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDec(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAdd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSub(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrMul(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDiv(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAnd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrOr(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrXor(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrNeg(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrNot(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrBswap(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRol(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRor(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrShl(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrShr(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSar(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrPush(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrPop(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrTest(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCmp(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrMov(int argc, char* argv[]);
|
||||
bool cbInstrInc(int argc, char* argv[]);
|
||||
bool cbInstrDec(int argc, char* argv[]);
|
||||
bool cbInstrAdd(int argc, char* argv[]);
|
||||
bool cbInstrSub(int argc, char* argv[]);
|
||||
bool cbInstrMul(int argc, char* argv[]);
|
||||
bool cbInstrDiv(int argc, char* argv[]);
|
||||
bool cbInstrAnd(int argc, char* argv[]);
|
||||
bool cbInstrOr(int argc, char* argv[]);
|
||||
bool cbInstrXor(int argc, char* argv[]);
|
||||
bool cbInstrNeg(int argc, char* argv[]);
|
||||
bool cbInstrNot(int argc, char* argv[]);
|
||||
bool cbInstrBswap(int argc, char* argv[]);
|
||||
bool cbInstrRol(int argc, char* argv[]);
|
||||
bool cbInstrRor(int argc, char* argv[]);
|
||||
bool cbInstrShl(int argc, char* argv[]);
|
||||
bool cbInstrShr(int argc, char* argv[]);
|
||||
bool cbInstrSar(int argc, char* argv[]);
|
||||
bool cbInstrPush(int argc, char* argv[]);
|
||||
bool cbInstrPop(int argc, char* argv[]);
|
||||
bool cbInstrTest(int argc, char* argv[]);
|
||||
bool cbInstrCmp(int argc, char* argv[]);
|
||||
bool cbInstrMov(int argc, char* argv[]);
|
|
@ -7,7 +7,7 @@
|
|||
#include "stringformat.h"
|
||||
#include "value.h"
|
||||
|
||||
CMDRESULT cbDebugDisasm(int argc, char* argv[])
|
||||
bool cbDebugDisasm(int argc, char* argv[])
|
||||
{
|
||||
duint addr = 0;
|
||||
if(argc > 1)
|
||||
|
@ -22,21 +22,21 @@ CMDRESULT cbDebugDisasm(int argc, char* argv[])
|
|||
DebugUpdateGui(addr, false);
|
||||
GuiShowCpu();
|
||||
GuiFocusView(GUI_DISASSEMBLY);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugDump(int argc, char* argv[])
|
||||
bool cbDebugDump(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid address \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(argc > 2)
|
||||
{
|
||||
|
@ -44,7 +44,7 @@ CMDRESULT cbDebugDump(int argc, char* argv[])
|
|||
if(!valfromstring(argv[2], &index))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid address \"%s\"!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiDumpAtN(addr, int(index));
|
||||
}
|
||||
|
@ -52,10 +52,10 @@ CMDRESULT cbDebugDump(int argc, char* argv[])
|
|||
GuiDumpAt(addr);
|
||||
GuiShowCpu();
|
||||
GuiFocusView(GUI_DUMP);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugStackDump(int argc, char* argv[])
|
||||
bool cbDebugStackDump(int argc, char* argv[])
|
||||
{
|
||||
duint addr = 0;
|
||||
if(argc < 2)
|
||||
|
@ -63,7 +63,7 @@ CMDRESULT cbDebugStackDump(int argc, char* argv[])
|
|||
else if(!valfromstring(argv[1], &addr))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid address \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint csp = GetContextDataEx(hActiveThread, UE_CSP);
|
||||
duint size = 0;
|
||||
|
@ -74,25 +74,25 @@ CMDRESULT cbDebugStackDump(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Invalid stack address!"));
|
||||
GuiShowCpu();
|
||||
GuiFocusView(GUI_STACK);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugMemmapdump(int argc, char* argv[])
|
||||
bool cbDebugMemmapdump(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr;
|
||||
if(!valfromstring(argv[1], &addr, false) || !MemIsValidReadPtr(addr, true))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid address \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiSelectInMemoryMap(addr);
|
||||
GuiFocusView(GUI_MEMMAP);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrGraph(int argc, char* argv[])
|
||||
bool cbInstrGraph(int argc, char* argv[])
|
||||
{
|
||||
duint entry;
|
||||
if(argc < 2 || !valfromstring(argv[1], &entry))
|
||||
|
@ -105,7 +105,7 @@ CMDRESULT cbInstrGraph(int argc, char* argv[])
|
|||
{
|
||||
if(argc <= 2) //undocumented silent option
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid address %p!\n"), entry);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!GuiGraphAt(sel))
|
||||
{
|
||||
|
@ -118,42 +118,42 @@ CMDRESULT cbInstrGraph(int argc, char* argv[])
|
|||
if(!graph)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No graph generated..."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto graphList = graph->ToGraphList();
|
||||
GuiLoadGraph(&graphList, sel);
|
||||
}
|
||||
GuiUpdateAllViews();
|
||||
GuiFocusView(GUI_GRAPH);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrEnableGuiUpdate(int argc, char* argv[])
|
||||
bool cbInstrEnableGuiUpdate(int argc, char* argv[])
|
||||
{
|
||||
if(GuiIsUpdateDisabled())
|
||||
GuiUpdateEnable(false);
|
||||
duint value;
|
||||
//default: update gui
|
||||
if(argc > 1 && valfromstring(argv[1], &value) && value == 0)
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
duint cip = GetContextDataEx(hActiveThread, UE_CIP);
|
||||
DebugUpdateGuiAsync(cip, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDisableGuiUpdate(int argc, char* argv[])
|
||||
bool cbInstrDisableGuiUpdate(int argc, char* argv[])
|
||||
{
|
||||
if(!GuiIsUpdateDisabled())
|
||||
GuiUpdateDisable();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetfreezestack(int argc, char* argv[])
|
||||
bool cbDebugSetfreezestack(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
bool freeze = *argv[1] != '0';
|
||||
dbgsetfreezestack(freeze);
|
||||
|
@ -161,12 +161,12 @@ CMDRESULT cbDebugSetfreezestack(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Stack is now freezed\n"));
|
||||
else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Stack is now unfreezed\n"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool bRefinit = false;
|
||||
|
||||
CMDRESULT cbInstrRefinit(int argc, char* argv[])
|
||||
bool cbInstrRefinit(int argc, char* argv[])
|
||||
{
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Script")));
|
||||
GuiReferenceAddColumn(sizeof(duint) * 2, GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Address")));
|
||||
|
@ -174,16 +174,16 @@ CMDRESULT cbInstrRefinit(int argc, char* argv[])
|
|||
GuiReferenceSetRowCount(0);
|
||||
GuiReferenceReloadData();
|
||||
bRefinit = true;
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRefadd(int argc, char* argv[])
|
||||
bool cbInstrRefadd(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!bRefinit)
|
||||
cbInstrRefinit(argc, argv);
|
||||
int index = GuiReferenceGetRowCount();
|
||||
|
@ -193,74 +193,74 @@ CMDRESULT cbInstrRefadd(int argc, char* argv[])
|
|||
GuiReferenceSetCellContent(index, 0, addr_text);
|
||||
GuiReferenceSetCellContent(index, 1, stringformatinline(argv[2]).c_str());
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrEnableLog(int argc, char* argv[])
|
||||
bool cbInstrEnableLog(int argc, char* argv[])
|
||||
{
|
||||
GuiEnableLog();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDisableLog(int argc, char* argv[])
|
||||
bool cbInstrDisableLog(int argc, char* argv[])
|
||||
{
|
||||
GuiDisableLog();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddFavTool(int argc, char* argv[])
|
||||
bool cbInstrAddFavTool(int argc, char* argv[])
|
||||
{
|
||||
// filename, description
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
if(argc == 2)
|
||||
GuiAddFavouriteTool(argv[1], nullptr);
|
||||
else
|
||||
GuiAddFavouriteTool(argv[1], argv[2]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddFavCmd(int argc, char* argv[])
|
||||
bool cbInstrAddFavCmd(int argc, char* argv[])
|
||||
{
|
||||
// command, shortcut
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
if(argc == 2)
|
||||
GuiAddFavouriteCommand(argv[1], nullptr);
|
||||
else
|
||||
GuiAddFavouriteCommand(argv[1], argv[2]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSetFavToolShortcut(int argc, char* argv[])
|
||||
bool cbInstrSetFavToolShortcut(int argc, char* argv[])
|
||||
{
|
||||
// filename, shortcut
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
GuiSetFavouriteToolShortcut(argv[1], argv[2]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFoldDisassembly(int argc, char* argv[])
|
||||
bool cbInstrFoldDisassembly(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
duint start, length;
|
||||
if(!valfromstring(argv[1], &start))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid argument 1 : %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!valfromstring(argv[2], &length))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid argument 2 : %s\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiFoldDisassembly(start, length);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugDisasm(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugDump(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugStackDump(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugMemmapdump(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrGraph(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrEnableGuiUpdate(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDisableGuiUpdate(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetfreezestack(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRefinit(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRefadd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrEnableLog(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDisableLog(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddFavTool(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddFavCmd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSetFavToolShortcut(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFoldDisassembly(int argc, char* argv[]);
|
||||
bool cbDebugDisasm(int argc, char* argv[]);
|
||||
bool cbDebugDump(int argc, char* argv[]);
|
||||
bool cbDebugStackDump(int argc, char* argv[]);
|
||||
bool cbDebugMemmapdump(int argc, char* argv[]);
|
||||
bool cbInstrGraph(int argc, char* argv[]);
|
||||
bool cbInstrEnableGuiUpdate(int argc, char* argv[]);
|
||||
bool cbInstrDisableGuiUpdate(int argc, char* argv[]);
|
||||
bool cbDebugSetfreezestack(int argc, char* argv[]);
|
||||
bool cbInstrRefinit(int argc, char* argv[]);
|
||||
bool cbInstrRefadd(int argc, char* argv[]);
|
||||
bool cbInstrEnableLog(int argc, char* argv[]);
|
||||
bool cbInstrDisableLog(int argc, char* argv[]);
|
||||
bool cbInstrAddFavTool(int argc, char* argv[]);
|
||||
bool cbInstrAddFavCmd(int argc, char* argv[]);
|
||||
bool cbInstrSetFavToolShortcut(int argc, char* argv[]);
|
||||
bool cbInstrFoldDisassembly(int argc, char* argv[]);
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
#include "filehelper.h"
|
||||
#include "value.h"
|
||||
|
||||
CMDRESULT cbDebugAlloc(int argc, char* argv[])
|
||||
bool cbDebugAlloc(int argc, char* argv[])
|
||||
{
|
||||
duint size = 0x1000, addr = 0;
|
||||
if(argc > 1)
|
||||
if(!valfromstring(argv[1], &size, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(argc > 2)
|
||||
if(!valfromstring(argv[2], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint mem = (duint)MemAllocRemote(addr, size);
|
||||
if(!mem)
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "VirtualAllocEx failed"));
|
||||
|
@ -27,10 +27,10 @@ CMDRESULT cbDebugAlloc(int argc, char* argv[])
|
|||
GuiUpdateMemoryView();
|
||||
|
||||
varset("$res", mem, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugFree(int argc, char* argv[])
|
||||
bool cbDebugFree(int argc, char* argv[])
|
||||
{
|
||||
duint lastalloc;
|
||||
varget("$lastalloc", &lastalloc, 0, 0);
|
||||
|
@ -38,12 +38,12 @@ CMDRESULT cbDebugFree(int argc, char* argv[])
|
|||
if(argc > 1)
|
||||
{
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
else if(!lastalloc)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "$lastalloc is zero, provide a page address"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(addr == lastalloc)
|
||||
varset("$lastalloc", (duint)0, true);
|
||||
|
@ -55,10 +55,10 @@ CMDRESULT cbDebugFree(int argc, char* argv[])
|
|||
GuiUpdateMemoryView();
|
||||
|
||||
varset("$res", ok, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugMemset(int argc, char* argv[])
|
||||
bool cbDebugMemset(int argc, char* argv[])
|
||||
{
|
||||
duint addr;
|
||||
duint value;
|
||||
|
@ -66,14 +66,14 @@ CMDRESULT cbDebugMemset(int argc, char* argv[])
|
|||
if(argc < 3)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!valfromstring(argv[1], &addr, false) || !valfromstring(argv[2], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(argc > 3)
|
||||
{
|
||||
if(!valfromstring(argv[3], &size, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -81,7 +81,7 @@ CMDRESULT cbDebugMemset(int argc, char* argv[])
|
|||
if(!base)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Invalid address specified"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint diff = addr - base;
|
||||
addr = base + diff;
|
||||
|
@ -92,10 +92,10 @@ CMDRESULT cbDebugMemset(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Memset failed"));
|
||||
else
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory %p (size: %.8X) set to %.2X\n"), addr, DWORD(size & 0xFFFFFFFF), BYTE(value & 0xFF));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetPageRights(int argc, char* argv[])
|
||||
bool cbDebugGetPageRights(int argc, char* argv[])
|
||||
{
|
||||
duint addr = 0;
|
||||
char rights[RIGHTS_STRING_SIZE];
|
||||
|
@ -103,21 +103,21 @@ CMDRESULT cbDebugGetPageRights(int argc, char* argv[])
|
|||
if(argc != 2 || !valfromstring(argv[1], &addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: using an address as arg1\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!MemGetPageRights(addr, rights))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error getting rights of page: %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Page: %p, Rights: %s\n"), addr, rights);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetPageRights(int argc, char* argv[])
|
||||
bool cbDebugSetPageRights(int argc, char* argv[])
|
||||
{
|
||||
duint addr = 0;
|
||||
char rights[RIGHTS_STRING_SIZE];
|
||||
|
@ -125,19 +125,19 @@ CMDRESULT cbDebugSetPageRights(int argc, char* argv[])
|
|||
if(argc < 3 || !valfromstring(argv[1], &addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: Using an address as arg1 and as arg2: Execute, ExecuteRead, ExecuteReadWrite, ExecuteWriteCopy, NoAccess, ReadOnly, ReadWrite, WriteCopy. You can add a G at first for add PAGE GUARD, example: GReadOnly\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!MemSetPageRights(addr, argv[2]))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error: Set rights of %p with Rights: %s\n"), addr, argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!MemGetPageRights(addr, rights))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error getting rights of page: %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
//update the memory map
|
||||
|
@ -146,22 +146,22 @@ CMDRESULT cbDebugSetPageRights(int argc, char* argv[])
|
|||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "New rights of %p: %s\n"), addr, rights);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSavedata(int argc, char* argv[])
|
||||
bool cbInstrSavedata(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 4))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr, size;
|
||||
if(!valfromstring(argv[2], &addr, false) || !valfromstring(argv[3], &size, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
Memory<unsigned char*> data(size);
|
||||
if(!MemRead(addr, data(), data.size()))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Failed to read memory..."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
String name = argv[1];
|
||||
|
@ -171,7 +171,7 @@ CMDRESULT cbInstrSavedata(int argc, char* argv[])
|
|||
if(!FileHelper::WriteAllData(name, data(), data.size()))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Failed to write file..."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
#ifdef _WIN64
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%p[% llX] written to \"%s\" !\n"), addr, size, name.c_str());
|
||||
|
@ -179,5 +179,5 @@ CMDRESULT cbInstrSavedata(int argc, char* argv[])
|
|||
dprintf(QT_TRANSLATE_NOOP("DBG", "%p[% X] written to \"%s\" !\n"), addr, size, name.c_str());
|
||||
#endif
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugAlloc(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugFree(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugMemset(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetPageRights(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetPageRights(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSavedata(int argc, char* argv[]);
|
||||
bool cbDebugAlloc(int argc, char* argv[]);
|
||||
bool cbDebugFree(int argc, char* argv[]);
|
||||
bool cbDebugMemset(int argc, char* argv[]);
|
||||
bool cbDebugGetPageRights(int argc, char* argv[]);
|
||||
bool cbDebugSetPageRights(int argc, char* argv[]);
|
||||
bool cbInstrSavedata(int argc, char* argv[]);
|
|
@ -12,40 +12,40 @@
|
|||
#include "mnemonichelp.h"
|
||||
#include "commandline.h"
|
||||
|
||||
CMDRESULT cbInstrChd(int argc, char* argv[])
|
||||
bool cbInstrChd(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!DirExists(argv[1]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "directory doesn't exist"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
SetCurrentDirectoryW(StringUtils::Utf8ToUtf16(argv[1]).c_str());
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "current directory changed!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrZzz(int argc, char* argv[])
|
||||
bool cbInstrZzz(int argc, char* argv[])
|
||||
{
|
||||
duint value = 100;
|
||||
if(argc > 1)
|
||||
if(!valfromstring(argv[1], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto ms = DWORD(value);
|
||||
if(ms == INFINITE)
|
||||
ms = 100;
|
||||
Sleep(ms);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugHide(int argc, char* argv[])
|
||||
bool cbDebugHide(int argc, char* argv[])
|
||||
{
|
||||
if(HideDebugger(fdProcessInfo->hProcess, UE_HIDE_PEBONLY))
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Debugger hidden"));
|
||||
else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Something went wrong"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static duint LoadLibThreadID;
|
||||
|
@ -77,12 +77,12 @@ static void cbDebugLoadLibBPX()
|
|||
wait(WAITID_RUN);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugLoadLib(int argc, char* argv[])
|
||||
bool cbDebugLoadLib(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: you must specify the name of the DLL to load\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
LoadLibThreadID = fdProcessInfo->dwThreadId;
|
||||
|
@ -94,13 +94,13 @@ CMDRESULT cbDebugLoadLib(int argc, char* argv[])
|
|||
if(!DLLNameMem || !ASMAddr)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: couldn't allocate memory in debuggee"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!MemWrite(DLLNameMem, argv[1], strlen(argv[1])))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: couldn't write process memory"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
int size = 0;
|
||||
|
@ -114,7 +114,7 @@ CMDRESULT cbDebugLoadLib(int argc, char* argv[])
|
|||
if(!valfromstring("kernel32:LoadLibraryA", &LoadLibraryA, false))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: couldn't get kernel32:LoadLibraryA"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Arch specific asm code
|
||||
|
@ -147,23 +147,23 @@ CMDRESULT cbDebugLoadLib(int argc, char* argv[])
|
|||
|
||||
unlock(WAITID_RUN);
|
||||
|
||||
return ok ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
return ok;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAssemble(int argc, char* argv[])
|
||||
bool cbInstrAssemble(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid expression: \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!DbgMemIsValidReadPtr(addr))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid address: %p!\n"), addr);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
bool fillnop = false;
|
||||
if(argc > 3)
|
||||
|
@ -174,17 +174,17 @@ CMDRESULT cbInstrAssemble(int argc, char* argv[])
|
|||
{
|
||||
varset("$result", size, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to assemble \"%s\" (%s)\n"), argv[2], error);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
varset("$result", size, false);
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrGpa(int argc, char* argv[])
|
||||
bool cbInstrGpa(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
char newcmd[deflen] = "";
|
||||
if(argc >= 3)
|
||||
sprintf_s(newcmd, "\"%s\":%s", argv[2], argv[1]);
|
||||
|
@ -192,12 +192,12 @@ CMDRESULT cbInstrGpa(int argc, char* argv[])
|
|||
sprintf_s(newcmd, "%s", argv[1]);
|
||||
duint result = 0;
|
||||
if(!valfromstring(newcmd, &result, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
varset("$RESULT", result, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
||||
bool cbDebugSetJIT(int argc, char* argv[])
|
||||
{
|
||||
arch actual_arch = invalid;
|
||||
char* jit_debugger_cmd = "";
|
||||
|
@ -206,7 +206,7 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
if(!IsProcessElevated())
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error run the debugger as Admin to setjit\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(argc < 2)
|
||||
{
|
||||
|
@ -216,7 +216,7 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
if(!dbgsetjit(jit_debugger_cmd, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error setting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(argc == 2)
|
||||
|
@ -227,13 +227,13 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
if(!BridgeSettingGet("JIT", "Old", jit_debugger_cmd))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error there is no old JIT entry stored."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbgsetjit(jit_debugger_cmd, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error setting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(!_strcmpi(argv[1], "oldsave"))
|
||||
|
@ -253,7 +253,7 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
if(!dbgsetjit(jit_debugger_cmd, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error setting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(get_last_jit)
|
||||
{
|
||||
|
@ -268,13 +268,13 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
if(!BridgeSettingGet("JIT", "Old", jit_debugger_cmd))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error there is no old JIT entry stored."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbgsetjit(jit_debugger_cmd, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error setting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
BridgeSettingSet("JIT", 0, 0);
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
if(!dbgsetjit(jit_debugger_cmd, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error setting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -298,7 +298,7 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "New OLD JIT stored: %s\n"), argv[2]);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
else if(_strcmpi(argv[1], "x64") == 0)
|
||||
|
@ -308,7 +308,7 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown JIT entry type. Use OLD, x64 or x32 as parameter."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
jit_debugger_cmd = argv[2];
|
||||
|
@ -318,21 +318,21 @@ CMDRESULT cbDebugSetJIT(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Error using x64 arg. The debugger is not a WOW64 process\n"));
|
||||
else
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error setting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error unknown parameters. Use old, oldsave, restore, x86 or x64 as parameter."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "New JIT %s: %s\n"), (actual_arch == x64) ? "x64" : "x32", jit_debugger_cmd);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetJIT(int argc, char* argv[])
|
||||
bool cbDebugGetJIT(int argc, char* argv[])
|
||||
{
|
||||
char get_entry[JIT_ENTRY_MAX_SIZE] = "";
|
||||
arch actual_arch;
|
||||
|
@ -342,7 +342,7 @@ CMDRESULT cbDebugGetJIT(int argc, char* argv[])
|
|||
if(!dbggetjit(get_entry, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error getting JIT %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -354,12 +354,12 @@ CMDRESULT cbDebugGetJIT(int argc, char* argv[])
|
|||
if(!BridgeSettingGet("JIT", "Old", oldjit()))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: there is not an OLD JIT entry stored yet."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "OLD JIT entry stored: %s\n"), oldjit());
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if(_strcmpi(argv[1], "x64") == 0)
|
||||
|
@ -369,7 +369,7 @@ CMDRESULT cbDebugGetJIT(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown JIT entry type. Use OLD, x64 or x32 as parameter."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbggetjit(get_entry, actual_arch, NULL, &rw_error))
|
||||
|
@ -378,16 +378,16 @@ CMDRESULT cbDebugGetJIT(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Error using x64 arg. The debugger is not a WOW64 process\n"));
|
||||
else
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error getting JIT %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "JIT %s: %s\n"), (actual_arch == x64) ? "x64" : "x32", get_entry);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetJITAuto(int argc, char* argv[])
|
||||
bool cbDebugGetJITAuto(int argc, char* argv[])
|
||||
{
|
||||
bool jit_auto = false;
|
||||
arch actual_arch = invalid;
|
||||
|
@ -397,7 +397,7 @@ CMDRESULT cbDebugGetJITAuto(int argc, char* argv[])
|
|||
if(!dbggetjitauto(&jit_auto, notfound, &actual_arch, NULL))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error getting JIT auto %s\n"), (actual_arch == x64) ? "x64" : "x32");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(argc == 2)
|
||||
|
@ -410,7 +410,7 @@ CMDRESULT cbDebugGetJITAuto(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown JIT auto entry type. Use x64 or x32 as parameter."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbggetjitauto(&jit_auto, actual_arch, NULL, &rw_error))
|
||||
|
@ -419,7 +419,7 @@ CMDRESULT cbDebugGetJITAuto(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Error using x64 arg the debugger is not a WOW64 process\n"));
|
||||
else
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Error getting JIT auto %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -429,22 +429,22 @@ CMDRESULT cbDebugGetJITAuto(int argc, char* argv[])
|
|||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "JIT auto %s: %s\n"), (actual_arch == x64) ? "x64" : "x32", jit_auto ? "ON" : "OFF");
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetJITAuto(int argc, char* argv[])
|
||||
bool cbDebugSetJITAuto(int argc, char* argv[])
|
||||
{
|
||||
arch actual_arch;
|
||||
bool set_jit_auto;
|
||||
if(!IsProcessElevated())
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error run the debugger as Admin to setjitauto\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error setting JIT Auto. Use ON:1 or OFF:0 arg or x64/x32, ON:1 or OFF:0.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
else if(argc == 2)
|
||||
{
|
||||
|
@ -455,7 +455,7 @@ CMDRESULT cbDebugSetJITAuto(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error unknown parameters. Use ON:1 or OFF:0"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbgsetjitauto(set_jit_auto, notfound, &actual_arch, NULL))
|
||||
|
@ -464,7 +464,7 @@ CMDRESULT cbDebugSetJITAuto(int argc, char* argv[])
|
|||
dputs(QT_TRANSLATE_NOOP("DBG", "Error setting JIT auto x64"));
|
||||
else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error setting JIT auto x32"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(argc == 3)
|
||||
|
@ -479,7 +479,7 @@ CMDRESULT cbDebugSetJITAuto(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown JIT auto entry type. Use x64 or x32 as parameter"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(_strcmpi(argv[2], "1") == 0 || _strcmpi(argv[2], "ON") == 0)
|
||||
|
@ -489,7 +489,7 @@ CMDRESULT cbDebugSetJITAuto(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error unknown parameters. Use x86 or x64 and ON:1 or OFF:0\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbgsetjitauto(set_jit_auto, actual_arch, NULL, &rw_error))
|
||||
|
@ -503,20 +503,20 @@ CMDRESULT cbDebugSetJITAuto(int argc, char* argv[])
|
|||
else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error getting JIT auto x32"));
|
||||
}
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error unknown parameters use x86 or x64, ON/1 or OFF/0\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "New JIT auto %s: %s\n"), (actual_arch == x64) ? "x64" : "x32", set_jit_auto ? "ON" : "OFF");
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugGetCmdline(int argc, char* argv[])
|
||||
bool cbDebugGetCmdline(int argc, char* argv[])
|
||||
{
|
||||
char* cmd_line;
|
||||
cmdline_error_t cmdline_error = { (cmdline_error_type_t)0, 0 };
|
||||
|
@ -524,30 +524,30 @@ CMDRESULT cbDebugGetCmdline(int argc, char* argv[])
|
|||
if(!dbggetcmdline(&cmd_line, &cmdline_error))
|
||||
{
|
||||
showcommandlineerror(&cmdline_error);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Command line: %s\n"), cmd_line);
|
||||
|
||||
efree(cmd_line);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetCmdline(int argc, char* argv[])
|
||||
bool cbDebugSetCmdline(int argc, char* argv[])
|
||||
{
|
||||
cmdline_error_t cmdline_error = { (cmdline_error_type_t)0, 0 };
|
||||
|
||||
if(argc != 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error: write the arg1 with the new command line of the process debugged"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dbgsetcmdline(argv[1], &cmdline_error))
|
||||
{
|
||||
showcommandlineerror(&cmdline_error);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
//update the memory map
|
||||
|
@ -556,13 +556,13 @@ CMDRESULT cbDebugSetCmdline(int argc, char* argv[])
|
|||
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "New command line: %s\n"), argv[1]);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrMnemonichelp(int argc, char* argv[])
|
||||
bool cbInstrMnemonichelp(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto description = MnemonicHelp::getDescription(argv[1]);
|
||||
if(!description.length())
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "no description or empty description"));
|
||||
|
@ -572,13 +572,13 @@ CMDRESULT cbInstrMnemonichelp(int argc, char* argv[])
|
|||
auto logText = StringUtils::sprintf("%s%s%s\n", padding, description.c_str(), padding);
|
||||
GuiAddLogMessage(logText.c_str());
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrMnemonicbrief(int argc, char* argv[])
|
||||
bool cbInstrMnemonicbrief(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
dputs(MnemonicHelp::getBriefDescription(argv[1]).c_str());
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrChd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrZzz(int argc, char* argv[]);
|
||||
bool cbInstrChd(int argc, char* argv[]);
|
||||
bool cbInstrZzz(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugHide(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugLoadLib(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAssemble(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrGpa(int argc, char* argv[]);
|
||||
bool cbDebugHide(int argc, char* argv[]);
|
||||
bool cbDebugLoadLib(int argc, char* argv[]);
|
||||
bool cbInstrAssemble(int argc, char* argv[]);
|
||||
bool cbInstrGpa(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugSetJIT(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetJIT(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugGetJITAuto(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetJITAuto(int argc, char* argv[]);
|
||||
bool cbDebugSetJIT(int argc, char* argv[]);
|
||||
bool cbDebugGetJIT(int argc, char* argv[]);
|
||||
bool cbDebugGetJITAuto(int argc, char* argv[]);
|
||||
bool cbDebugSetJITAuto(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbDebugGetCmdline(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetCmdline(int argc, char* argv[]);
|
||||
bool cbDebugGetCmdline(int argc, char* argv[]);
|
||||
bool cbDebugSetCmdline(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrMnemonichelp(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrMnemonicbrief(int argc, char* argv[]);
|
||||
bool cbInstrMnemonichelp(int argc, char* argv[]);
|
||||
bool cbInstrMnemonicbrief(int argc, char* argv[]);
|
|
@ -4,16 +4,16 @@
|
|||
#include "exception.h"
|
||||
#include "value.h"
|
||||
|
||||
CMDRESULT cbGetPrivilegeState(int argc, char* argv[])
|
||||
bool cbGetPrivilegeState(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
DWORD returnLength;
|
||||
LUID luid;
|
||||
if(LookupPrivilegeValueW(nullptr, StringUtils::Utf8ToUtf16(argv[1]).c_str(), &luid) == 0)
|
||||
{
|
||||
varset("$result", (duint)0, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory <TOKEN_PRIVILEGES*> Privileges(64 * 16 + 8, "_dbg_getprivilegestate");
|
||||
if(GetTokenInformation(hProcessToken, TokenPrivileges, Privileges(), 64 * 16 + 8, &returnLength) == 0)
|
||||
|
@ -21,78 +21,77 @@ CMDRESULT cbGetPrivilegeState(int argc, char* argv[])
|
|||
if(returnLength > 4 * 1024 * 1024)
|
||||
{
|
||||
varset("$result", (duint)0, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Privileges.realloc(returnLength, "_dbg_getprivilegestate");
|
||||
if(GetTokenInformation(hProcessToken, TokenPrivileges, Privileges(), returnLength, &returnLength) == 0)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
for(unsigned int i = 0; i < Privileges()->PrivilegeCount; i++)
|
||||
{
|
||||
if(4 + sizeof(LUID_AND_ATTRIBUTES) * i > returnLength)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(memcmp(&Privileges()->Privileges[i].Luid, &luid, sizeof(LUID)) == 0)
|
||||
{
|
||||
varset("$result", (duint)(Privileges()->Privileges[i].Attributes + 1), false); // 2=enabled, 3=default, 1=disabled
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
varset("$result", (duint)0, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbEnablePrivilege(int argc, char* argv[])
|
||||
bool cbEnablePrivilege(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
LUID luid;
|
||||
if(LookupPrivilegeValueW(nullptr, StringUtils::Utf8ToUtf16(argv[1]).c_str(), &luid) == 0)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Could not find the specified privilege: %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
TOKEN_PRIVILEGES Privilege;
|
||||
Privilege.PrivilegeCount = 1;
|
||||
Privilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
||||
Privilege.Privileges[0].Luid = luid;
|
||||
bool ret = AdjustTokenPrivileges(hProcessToken, FALSE, &Privilege, sizeof(TOKEN_PRIVILEGES), nullptr, nullptr) != NO_ERROR;
|
||||
return ret ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
return AdjustTokenPrivileges(hProcessToken, FALSE, &Privilege, sizeof(TOKEN_PRIVILEGES), nullptr, nullptr) != NO_ERROR;
|
||||
}
|
||||
|
||||
CMDRESULT cbDisablePrivilege(int argc, char* argv[])
|
||||
bool cbDisablePrivilege(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
LUID luid;
|
||||
if(LookupPrivilegeValueW(nullptr, StringUtils::Utf8ToUtf16(argv[1]).c_str(), &luid) == 0)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Could not find the specified privilege: %s\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
TOKEN_PRIVILEGES Privilege;
|
||||
Privilege.PrivilegeCount = 1;
|
||||
Privilege.Privileges[0].Attributes = 0;
|
||||
Privilege.Privileges[0].Luid = luid;
|
||||
bool ret = AdjustTokenPrivileges(hProcessToken, FALSE, &Privilege, sizeof(TOKEN_PRIVILEGES), nullptr, nullptr) != NO_ERROR;
|
||||
return ret ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
return ret ? true : false;
|
||||
}
|
||||
|
||||
CMDRESULT cbHandleClose(int argc, char* argv[])
|
||||
bool cbHandleClose(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint handle;
|
||||
if(!valfromstring(argv[1], &handle, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!handle || !DuplicateHandle(fdProcessInfo->hProcess, HANDLE(handle), NULL, NULL, 0, FALSE, DUPLICATE_CLOSE_SOURCE))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "DuplicateHandle failed: %s\n"), ErrorCodeToName(GetLastError()).c_str());
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
#ifdef _WIN64
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Handle %llX closed!\n"), handle);
|
||||
#else //x86
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Handle %X closed!\n"), handle);
|
||||
#endif
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbGetPrivilegeState(int argc, char* argv[]);
|
||||
CMDRESULT cbEnablePrivilege(int argc, char* argv[]);
|
||||
CMDRESULT cbDisablePrivilege(int argc, char* argv[]);
|
||||
CMDRESULT cbHandleClose(int argc, char* argv[]);
|
||||
bool cbGetPrivilegeState(int argc, char* argv[]);
|
||||
bool cbEnablePrivilege(int argc, char* argv[]);
|
||||
bool cbDisablePrivilege(int argc, char* argv[]);
|
||||
bool cbHandleClose(int argc, char* argv[]);
|
|
@ -33,32 +33,32 @@ static DWORD WINAPI scyllaThread(void* lpParam)
|
|||
return 0;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugStartScylla(int argc, char* argv[])
|
||||
bool cbDebugStartScylla(int argc, char* argv[])
|
||||
{
|
||||
if(bScyllaLoaded)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Scylla is already loaded"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
bScyllaLoaded = true;
|
||||
CloseHandle(CreateThread(0, 0, scyllaThread, 0, 0, 0));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrPluginLoad(int argc, char* argv[])
|
||||
bool cbInstrPluginLoad(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(pluginload(argv[1]))
|
||||
return STATUS_CONTINUE;
|
||||
return STATUS_ERROR;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrPluginUnload(int argc, char* argv[])
|
||||
bool cbInstrPluginUnload(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(pluginunload(argv[1]))
|
||||
return STATUS_CONTINUE;
|
||||
return STATUS_ERROR;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugStartScylla(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrPluginLoad(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrPluginUnload(int argc, char* argv[]);
|
||||
bool cbDebugStartScylla(int argc, char* argv[]);
|
||||
bool cbInstrPluginLoad(int argc, char* argv[]);
|
||||
bool cbInstrPluginUnload(int argc, char* argv[]);
|
|
@ -4,42 +4,42 @@
|
|||
#include "variable.h"
|
||||
#include "simplescript.h"
|
||||
|
||||
CMDRESULT cbScriptLoad(int argc, char* argv[])
|
||||
bool cbScriptLoad(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
scriptload(argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbScriptMsg(int argc, char* argv[])
|
||||
bool cbScriptMsg(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "not enough arguments!")));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiScriptMessage(stringformatinline(argv[1]).c_str());
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbScriptMsgyn(int argc, char* argv[])
|
||||
bool cbScriptMsgyn(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "not enough arguments!")));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
varset("$RESULT", GuiScriptMsgyn(stringformatinline(argv[1]).c_str()), false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrLog(int argc, char* argv[])
|
||||
bool cbInstrLog(int argc, char* argv[])
|
||||
{
|
||||
if(argc == 1) //just log newline
|
||||
{
|
||||
dputs_untranslated("");
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
if(argc == 2) //inline logging: log "format {rax}"
|
||||
{
|
||||
|
@ -52,5 +52,5 @@ CMDRESULT cbInstrLog(int argc, char* argv[])
|
|||
formatArgs.push_back(argv[i]);
|
||||
dputs_untranslated(stringformat(argv[1], formatArgs).c_str());
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbScriptLoad(int argc, char* argv[]);
|
||||
CMDRESULT cbScriptMsg(int argc, char* argv[]);
|
||||
CMDRESULT cbScriptMsgyn(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrLog(int argc, char* argv[]);
|
||||
bool cbScriptLoad(int argc, char* argv[]);
|
||||
bool cbScriptMsg(int argc, char* argv[]);
|
||||
bool cbScriptMsgyn(int argc, char* argv[]);
|
||||
bool cbInstrLog(int argc, char* argv[]);
|
|
@ -11,13 +11,13 @@
|
|||
|
||||
static int maxFindResults = 5000;
|
||||
|
||||
CMDRESULT cbInstrFind(int argc, char* argv[])
|
||||
bool cbInstrFind(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
char pattern[deflen] = "";
|
||||
//remove # from the start and end of the pattern (ODBGScript support)
|
||||
if(argv[2][0] == '#')
|
||||
|
@ -32,13 +32,13 @@ CMDRESULT cbInstrFind(int argc, char* argv[])
|
|||
if(!base)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid memory address %p!\n"), addr);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
Memory<unsigned char*> data(size, "cbInstrFind:data");
|
||||
if(!MemRead(base, data(), size))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to read memory!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint start = addr - base;
|
||||
duint find_size = 0;
|
||||
|
@ -56,16 +56,16 @@ CMDRESULT cbInstrFind(int argc, char* argv[])
|
|||
if(foundoffset != -1)
|
||||
result = addr + foundoffset;
|
||||
varset("$result", result, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
||||
bool cbInstrFindAll(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
char pattern[deflen] = "";
|
||||
//remove # from the start and end of the pattern (ODBGScript support)
|
||||
|
@ -81,7 +81,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
|||
if(!base)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid memory address %p!\n"), addr);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(argc >= 4)
|
||||
{
|
||||
|
@ -93,7 +93,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
|||
if(!MemRead(base, data(), size))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to read memory!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint start = addr - base;
|
||||
duint find_size = 0;
|
||||
|
@ -133,7 +133,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
|||
if(!patterntransform(pattern, searchpattern))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to transform pattern!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
while(refCount < maxFindResults)
|
||||
{
|
||||
|
@ -169,16 +169,16 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
|||
GuiReferenceReloadData();
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d occurrences found in %ums\n"), refCount, GetTickCount() - ticks);
|
||||
varset("$result", refCount, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFindAllMem(int argc, char* argv[])
|
||||
bool cbInstrFindAllMem(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
char pattern[deflen] = "";
|
||||
//remove # from the start and end of the pattern (ODBGScript support)
|
||||
|
@ -193,7 +193,7 @@ CMDRESULT cbInstrFindAllMem(int argc, char* argv[])
|
|||
if(!patterntransform(pattern, searchpattern))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to transform pattern!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
duint endAddr = -1;
|
||||
|
@ -224,7 +224,7 @@ CMDRESULT cbInstrFindAllMem(int argc, char* argv[])
|
|||
if(!MemFindInMap(searchPages, searchpattern, results, maxFindResults))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "MemFindInMap failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
//setup reference view
|
||||
|
@ -274,7 +274,7 @@ CMDRESULT cbInstrFindAllMem(int argc, char* argv[])
|
|||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d occurrences found in %ums\n"), refCount, GetTickCount() - ticks);
|
||||
varset("$result", refCount, false);
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cbFindAsm(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
|
@ -305,10 +305,10 @@ static bool cbFindAsm(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFIN
|
|||
return found;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFindAsm(int argc, char* argv[])
|
||||
bool cbInstrFindAsm(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
duint addr = 0;
|
||||
if(argc < 3 || !valfromstring(argv[2], &addr))
|
||||
|
@ -329,7 +329,7 @@ CMDRESULT cbInstrFindAsm(int argc, char* argv[])
|
|||
if(!assemble(addr + size / 2, dest, &asmsize, argv[1], error))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to assemble \"%s\" (%s)!\n"), argv[1], error);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
BASIC_INSTRUCTION_INFO basicinfo;
|
||||
memset(&basicinfo, 0, sizeof(BASIC_INSTRUCTION_INFO));
|
||||
|
@ -341,13 +341,13 @@ CMDRESULT cbInstrFindAsm(int argc, char* argv[])
|
|||
int found = RefFind(addr, size, cbFindAsm, (void*)&basicinfo.instruction[0], false, title, (REFFINDTYPE)refFindType, true);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%u result(s) in %ums\n"), DWORD(found), GetTickCount() - DWORD(ticks));
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRefFind(int argc, char* argv[])
|
||||
bool cbInstrRefFind(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
std::string newCommand = std::string("reffindrange ") + argv[1] + std::string(",") + argv[1];
|
||||
if(argc > 2)
|
||||
newCommand += std::string(",") + argv[2];
|
||||
|
@ -412,13 +412,13 @@ static bool cbRefFind(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFIN
|
|||
return found;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRefFindRange(int argc, char* argv[])
|
||||
bool cbInstrRefFindRange(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
VALUERANGE range;
|
||||
if(!valfromstring(argv[1], &range.start, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(argc < 3 || !valfromstring(argv[2], &range.end, false))
|
||||
range.end = range.start;
|
||||
duint addr = 0;
|
||||
|
@ -443,7 +443,7 @@ CMDRESULT cbInstrRefFindRange(int argc, char* argv[])
|
|||
int found = RefFind(addr, size, cbRefFind, &range, false, title, (REFFINDTYPE)refFindType, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%u reference(s) in %ums\n"), DWORD(found), GetTickCount() - DWORD(ticks));
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cbRefStr(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
|
@ -489,7 +489,7 @@ static bool cbRefStr(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINF
|
|||
return found;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRefStr(int argc, char* argv[])
|
||||
bool cbInstrRefStr(int argc, char* argv[])
|
||||
{
|
||||
duint ticks = GetTickCount();
|
||||
duint addr;
|
||||
|
@ -512,7 +512,7 @@ CMDRESULT cbInstrRefStr(int argc, char* argv[])
|
|||
int found = RefFind(addr, size, cbRefStr, 0, false, TranslatedString.c_str(), (REFFINDTYPE)refFindType, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%u string(s) in %ums\n"), DWORD(found), GetTickCount() - DWORD(ticks));
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cbModCallFind(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
|
@ -558,7 +558,7 @@ static bool cbModCallFind(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, R
|
|||
return found;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrModCallFind(int argc, char* argv[])
|
||||
bool cbInstrModCallFind(int argc, char* argv[])
|
||||
{
|
||||
duint addr;
|
||||
if(argc < 2 || !valfromstring(argv[1], &addr, true))
|
||||
|
@ -578,7 +578,7 @@ CMDRESULT cbInstrModCallFind(int argc, char* argv[])
|
|||
int found = RefFind(addr, size, cbModCallFind, 0, false, Calls.c_str(), (REFFINDTYPE)refFindType, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%u call(s) in %ums\n"), DWORD(found), GetTickCount() - DWORD(ticks));
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
struct GUIDHashObject
|
||||
|
@ -762,7 +762,7 @@ static bool cbGUIDFind(Capstone* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFI
|
|||
return found;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrGUIDFind(int argc, char* argv[])
|
||||
bool cbInstrGUIDFind(int argc, char* argv[])
|
||||
{
|
||||
duint ticks = GetTickCount();
|
||||
duint addr;
|
||||
|
@ -788,7 +788,7 @@ CMDRESULT cbInstrGUIDFind(int argc, char* argv[])
|
|||
if(RegOpenKeyExW(HKEY_CLASSES_ROOT, L"CLSID", 0, KEY_READ, &CLSID))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "RegOpenKeyExW() failed. Cannot enumerate GUIDs."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
wchar_t subkeyName[40];
|
||||
|
@ -820,7 +820,7 @@ CMDRESULT cbInstrGUIDFind(int argc, char* argv[])
|
|||
dprintf(QT_TRANSLATE_NOOP("DBG", "%u GUID(s) in %ums\n"), DWORD(found), GetTickCount() - DWORD(ticks));
|
||||
varset("$result", found, false);
|
||||
RegCloseKey(CLSID);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static void yaraCompilerCallback(int error_level, const char* file_name, int line_number, const char* message, void* user_data)
|
||||
|
@ -976,10 +976,10 @@ static int yaraScanCallback(int message, void* message_data, void* user_data)
|
|||
return ERROR_SUCCESS; //nicely undocumented what this should be
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrYara(int argc, char* argv[])
|
||||
bool cbInstrYara(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
SELECTIONDATA sel;
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel);
|
||||
|
@ -1000,7 +1000,7 @@ CMDRESULT cbInstrYara(int argc, char* argv[])
|
|||
if(!valfromstring(argv[2], &addr))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid value \"%s\"!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
size = 0;
|
||||
|
@ -1018,12 +1018,12 @@ CMDRESULT cbInstrYara(int argc, char* argv[])
|
|||
if(!ModPathFromAddr(base, modPath, MAX_PATH))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to get module path for %p!\n"), base);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!FileHelper::ReadAllData(modPath, rawFileData))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to read file \"%s\"!\n"), modPath);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
size = rawFileData.size();
|
||||
}
|
||||
|
@ -1033,14 +1033,14 @@ CMDRESULT cbInstrYara(int argc, char* argv[])
|
|||
else if(!MemRead(base, data(), size))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to read memory page %p[%X]!\n"), base, DWORD(size));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
String rulesContent;
|
||||
if(!FileHelper::ReadAllText(argv[1], rulesContent))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Failed to read the rules file \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool bSuccess = false;
|
||||
|
@ -1101,31 +1101,31 @@ CMDRESULT cbInstrYara(int argc, char* argv[])
|
|||
}
|
||||
else
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "yr_compiler_create failed!"));
|
||||
return bSuccess ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrYaramod(int argc, char* argv[])
|
||||
bool cbInstrYaramod(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ModBaseFromName(argv[2]))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid module \"%s\"!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return cmddirectexec(StringUtils::sprintf("yara \"%s\",\"%s\",%s", argv[1], argv[2], argc > 3 && *argv[3] == '1' ? "1" : "0").c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSetMaxFindResult(int argc, char* argv[])
|
||||
bool cbInstrSetMaxFindResult(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint num;
|
||||
if(!valfromstring(argv[1], &num))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid expression: \"%s\""), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
maxFindResults = int(num & 0x7FFFFFFF);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrFind(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFindAll(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFindAllMem(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFindAsm(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRefFind(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRefFindRange(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRefStr(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrModCallFind(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrGUIDFind(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrYara(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrYaramod(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSetMaxFindResult(int argc, char* argv[]);
|
||||
bool cbInstrFind(int argc, char* argv[]);
|
||||
bool cbInstrFindAll(int argc, char* argv[]);
|
||||
bool cbInstrFindAllMem(int argc, char* argv[]);
|
||||
bool cbInstrFindAsm(int argc, char* argv[]);
|
||||
bool cbInstrRefFind(int argc, char* argv[]);
|
||||
bool cbInstrRefFindRange(int argc, char* argv[]);
|
||||
bool cbInstrRefStr(int argc, char* argv[]);
|
||||
bool cbInstrModCallFind(int argc, char* argv[]);
|
||||
bool cbInstrGUIDFind(int argc, char* argv[]);
|
||||
bool cbInstrYara(int argc, char* argv[]);
|
||||
bool cbInstrYaramod(int argc, char* argv[]);
|
||||
bool cbInstrSetMaxFindResult(int argc, char* argv[]);
|
||||
|
|
|
@ -8,26 +8,26 @@
|
|||
#include "historycontext.h"
|
||||
#include "thread.h"
|
||||
|
||||
CMDRESULT cbDebugCreatethread(int argc, char* argv[])
|
||||
bool cbDebugCreatethread(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint Entry = 0;
|
||||
duint Argument = 0;
|
||||
if(!valfromstring(argv[1], &Entry))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!MemIsCodePage(Entry, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(argc > 2)
|
||||
{
|
||||
if(!valfromstring(argv[2], &Argument))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
DWORD ThreadId = 0;
|
||||
if(ThreaderCreateRemoteThread(Entry, true, reinterpret_cast<LPVOID>(Argument), &ThreadId) != 0)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Create thread failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -40,20 +40,20 @@ CMDRESULT cbDebugCreatethread(int argc, char* argv[])
|
|||
dprintf(QT_TRANSLATE_NOOP("DBG", "Thread %X created at %s %p(Argument=%X)\n"), ThreadId, label, Entry, Argument);
|
||||
#endif
|
||||
varset("$result", ThreadId, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSwitchthread(int argc, char* argv[])
|
||||
bool cbDebugSwitchthread(int argc, char* argv[])
|
||||
{
|
||||
duint threadid = fdProcessInfo->dwThreadId; //main thread
|
||||
if(argc > 1)
|
||||
if(!valfromstring(argv[1], &threadid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ThreadIsValid((DWORD)threadid)) //check if the thread is valid
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//switch thread
|
||||
if(ThreadGetId(hActiveThread) != threadid)
|
||||
|
@ -63,105 +63,105 @@ CMDRESULT cbDebugSwitchthread(int argc, char* argv[])
|
|||
DebugUpdateGuiAsync(GetContextDataEx(hActiveThread, UE_CIP), true);
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Thread switched!"));
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSuspendthread(int argc, char* argv[])
|
||||
bool cbDebugSuspendthread(int argc, char* argv[])
|
||||
{
|
||||
duint threadid = fdProcessInfo->dwThreadId;
|
||||
if(argc > 1)
|
||||
if(!valfromstring(argv[1], &threadid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ThreadIsValid((DWORD)threadid)) //check if the thread is valid
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//suspend thread
|
||||
if(SuspendThread(ThreadGetHandle((DWORD)threadid)) == -1)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error suspending thread"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Thread suspended"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResumethread(int argc, char* argv[])
|
||||
bool cbDebugResumethread(int argc, char* argv[])
|
||||
{
|
||||
duint threadid = fdProcessInfo->dwThreadId;
|
||||
if(argc > 1)
|
||||
if(!valfromstring(argv[1], &threadid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ThreadIsValid((DWORD)threadid)) //check if the thread is valid
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//resume thread
|
||||
if(ResumeThread(ThreadGetHandle((DWORD)threadid)) == -1)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error resuming thread"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Thread resumed!"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugKillthread(int argc, char* argv[])
|
||||
bool cbDebugKillthread(int argc, char* argv[])
|
||||
{
|
||||
duint threadid = fdProcessInfo->dwThreadId;
|
||||
if(argc > 1)
|
||||
if(!valfromstring(argv[1], &threadid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint exitcode = 0;
|
||||
if(argc > 2)
|
||||
if(!valfromstring(argv[2], &exitcode, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ThreadIsValid((DWORD)threadid)) //check if the thread is valid
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//terminate thread
|
||||
if(TerminateThread(ThreadGetHandle((DWORD)threadid), (DWORD)exitcode) != 0)
|
||||
{
|
||||
GuiUpdateAllViews();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Thread terminated"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error terminating thread!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSuspendAllThreads(int argc, char* argv[])
|
||||
bool cbDebugSuspendAllThreads(int argc, char* argv[])
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d/%d thread(s) suspended\n"), ThreadSuspendAll(), ThreadGetCount());
|
||||
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugResumeAllThreads(int argc, char* argv[])
|
||||
bool cbDebugResumeAllThreads(int argc, char* argv[])
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d/%d thread(s) resumed\n"), ThreadResumeAll(), ThreadGetCount());
|
||||
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetPriority(int argc, char* argv[])
|
||||
bool cbDebugSetPriority(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 3)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint threadid;
|
||||
if(!valfromstring(argv[1], &threadid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint priority;
|
||||
if(!valfromstring(argv[2], &priority))
|
||||
{
|
||||
|
@ -182,7 +182,7 @@ CMDRESULT cbDebugSetPriority(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown priority value, read the help!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -199,51 +199,51 @@ CMDRESULT cbDebugSetPriority(int argc, char* argv[])
|
|||
break;
|
||||
default:
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown priority value, read the help!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(!ThreadIsValid((DWORD)threadid)) //check if the thread is valid
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//set thread priority
|
||||
if(SetThreadPriority(ThreadGetHandle((DWORD)threadid), (int)priority) == 0)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error setting thread priority"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Thread priority changed!"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugSetthreadname(int argc, char* argv[])
|
||||
bool cbDebugSetthreadname(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint threadid;
|
||||
if(!valfromstring(argv[1], &threadid, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
THREADINFO info;
|
||||
if(!ThreadGetInfo(DWORD(threadid), info))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
auto newname = argc > 2 ? argv[2] : "";
|
||||
if(!ThreadSetName(DWORD(threadid), newname))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Failed to change the name for thread %X\n"), DWORD(threadid));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!*info.threadName)
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Thread name set to \"%s\"!\n"), newname);
|
||||
else
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Thread name changed from \"%s\" to \"%s\"!\n"), info.threadName, newname);
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugCreatethread(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSwitchthread(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSuspendthread(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResumethread(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugKillthread(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSuspendAllThreads(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugResumeAllThreads(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetPriority(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugSetthreadname(int argc, char* argv[]);
|
||||
bool cbDebugCreatethread(int argc, char* argv[]);
|
||||
bool cbDebugSwitchthread(int argc, char* argv[]);
|
||||
bool cbDebugSuspendthread(int argc, char* argv[]);
|
||||
bool cbDebugResumethread(int argc, char* argv[]);
|
||||
bool cbDebugKillthread(int argc, char* argv[]);
|
||||
bool cbDebugSuspendAllThreads(int argc, char* argv[]);
|
||||
bool cbDebugResumeAllThreads(int argc, char* argv[]);
|
||||
bool cbDebugSetPriority(int argc, char* argv[]);
|
||||
bool cbDebugSetthreadname(int argc, char* argv[]);
|
|
@ -9,25 +9,25 @@
|
|||
|
||||
extern std::vector<std::pair<duint, duint>> RunToUserCodeBreakpoints;
|
||||
|
||||
static CMDRESULT cbDebugConditionalTrace(void* callBack, bool stepOver, int argc, char* argv[])
|
||||
static bool cbDebugConditionalTrace(void* callBack, bool stepOver, int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Not enough arguments"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(dbgtraceactive())
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Trace already active"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint maxCount = 50000;
|
||||
if(argc > 2 && !valfromstring(argv[2], &maxCount, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!dbgsettracecondition(argv[1], maxCount))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Invalid expression \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
HistoryClear();
|
||||
if(stepOver)
|
||||
|
@ -37,17 +37,17 @@ static CMDRESULT cbDebugConditionalTrace(void* callBack, bool stepOver, int argc
|
|||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugTraceIntoConditional(int argc, char* argv[])
|
||||
bool cbDebugTraceIntoConditional(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugConditionalTrace((void*)cbTICNDStep, false, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugTraceOverConditional(int argc, char* argv[])
|
||||
bool cbDebugTraceOverConditional(int argc, char* argv[])
|
||||
{
|
||||
return cbDebugConditionalTrace((void*)cbTOCNDStep, true, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugTraceIntoBeyondTraceRecord(int argc, char* argv[])
|
||||
bool cbDebugTraceIntoBeyondTraceRecord(int argc, char* argv[])
|
||||
{
|
||||
if(argc == 1)
|
||||
{
|
||||
|
@ -58,7 +58,7 @@ CMDRESULT cbDebugTraceIntoBeyondTraceRecord(int argc, char* argv[])
|
|||
return cbDebugConditionalTrace((void*)cbTIBTStep, false, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugTraceOverBeyondTraceRecord(int argc, char* argv[])
|
||||
bool cbDebugTraceOverBeyondTraceRecord(int argc, char* argv[])
|
||||
{
|
||||
if(argc == 1)
|
||||
{
|
||||
|
@ -69,7 +69,7 @@ CMDRESULT cbDebugTraceOverBeyondTraceRecord(int argc, char* argv[])
|
|||
return cbDebugConditionalTrace((void*)cbTOBTStep, true, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugTraceIntoIntoTraceRecord(int argc, char* argv[])
|
||||
bool cbDebugTraceIntoIntoTraceRecord(int argc, char* argv[])
|
||||
{
|
||||
if(argc == 1)
|
||||
{
|
||||
|
@ -80,7 +80,7 @@ CMDRESULT cbDebugTraceIntoIntoTraceRecord(int argc, char* argv[])
|
|||
return cbDebugConditionalTrace((void*)cbTIITStep, false, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugTraceOverIntoTraceRecord(int argc, char* argv[])
|
||||
bool cbDebugTraceOverIntoTraceRecord(int argc, char* argv[])
|
||||
{
|
||||
if(argc == 1)
|
||||
{
|
||||
|
@ -91,7 +91,7 @@ CMDRESULT cbDebugTraceOverIntoTraceRecord(int argc, char* argv[])
|
|||
return cbDebugConditionalTrace((void*)cbTOITStep, true, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugRunToParty(int argc, char* argv[])
|
||||
bool cbDebugRunToParty(int argc, char* argv[])
|
||||
{
|
||||
HistoryClear();
|
||||
EXCLUSIVE_ACQUIRE(LockRunToUserCode);
|
||||
|
@ -100,7 +100,7 @@ CMDRESULT cbDebugRunToParty(int argc, char* argv[])
|
|||
if(!RunToUserCodeBreakpoints.empty())
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Run to party is busy.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
int party = atoi(argv[1]); // party is a signed integer
|
||||
for(auto i : AllModules)
|
||||
|
@ -121,7 +121,7 @@ CMDRESULT cbDebugRunToParty(int argc, char* argv[])
|
|||
return cbDebugRunInternal(argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugRunToUserCode(int argc, char* argv[])
|
||||
bool cbDebugRunToUserCode(int argc, char* argv[])
|
||||
{
|
||||
char* newargv[] = { "RunToParty", "0" };
|
||||
return cbDebugRunToParty(argc, newargv);
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbDebugTraceIntoConditional(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugTraceOverConditional(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugTraceIntoBeyondTraceRecord(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugTraceOverBeyondTraceRecord(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugTraceIntoIntoTraceRecord(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugTraceOverIntoTraceRecord(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugRunToParty(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugRunToUserCode(int argc, char* argv[]);
|
||||
bool cbDebugTraceIntoConditional(int argc, char* argv[]);
|
||||
bool cbDebugTraceOverConditional(int argc, char* argv[]);
|
||||
bool cbDebugTraceIntoBeyondTraceRecord(int argc, char* argv[]);
|
||||
bool cbDebugTraceOverBeyondTraceRecord(int argc, char* argv[]);
|
||||
bool cbDebugTraceIntoIntoTraceRecord(int argc, char* argv[]);
|
||||
bool cbDebugTraceOverIntoTraceRecord(int argc, char* argv[]);
|
||||
bool cbDebugRunToParty(int argc, char* argv[]);
|
||||
bool cbDebugRunToUserCode(int argc, char* argv[]);
|
|
@ -8,170 +8,170 @@
|
|||
|
||||
using namespace Types;
|
||||
|
||||
static CMDRESULT cbInstrDataGeneric(ENCODETYPE type, int argc, char* argv[])
|
||||
static bool cbInstrDataGeneric(ENCODETYPE type, int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint size = 1;
|
||||
if(argc >= 3)
|
||||
if(!valfromstring(argv[2], &size, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
bool created;
|
||||
if(!EncodeMapSetType(addr, size, type, &created))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "EncodeMapSetType failed..."));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(created)
|
||||
DbgCmdExec("disasm dis.sel()");
|
||||
else
|
||||
GuiUpdateDisassemblyView();
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataUnknown(int argc, char* argv[])
|
||||
bool cbInstrDataUnknown(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_unknown, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataByte(int argc, char* argv[])
|
||||
bool cbInstrDataByte(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_byte, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataWord(int argc, char* argv[])
|
||||
bool cbInstrDataWord(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_word, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataDword(int argc, char* argv[])
|
||||
bool cbInstrDataDword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_dword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataFword(int argc, char* argv[])
|
||||
bool cbInstrDataFword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_fword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataQword(int argc, char* argv[])
|
||||
bool cbInstrDataQword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_qword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataTbyte(int argc, char* argv[])
|
||||
bool cbInstrDataTbyte(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_tbyte, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataOword(int argc, char* argv[])
|
||||
bool cbInstrDataOword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_oword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataMmword(int argc, char* argv[])
|
||||
bool cbInstrDataMmword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_mmword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataXmmword(int argc, char* argv[])
|
||||
bool cbInstrDataXmmword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_xmmword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataYmmword(int argc, char* argv[])
|
||||
bool cbInstrDataYmmword(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_ymmword, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataFloat(int argc, char* argv[])
|
||||
bool cbInstrDataFloat(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_real4, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataDouble(int argc, char* argv[])
|
||||
bool cbInstrDataDouble(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_real8, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataLongdouble(int argc, char* argv[])
|
||||
bool cbInstrDataLongdouble(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_real10, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataAscii(int argc, char* argv[])
|
||||
bool cbInstrDataAscii(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_ascii, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataUnicode(int argc, char* argv[])
|
||||
bool cbInstrDataUnicode(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_unicode, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataCode(int argc, char* argv[])
|
||||
bool cbInstrDataCode(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_code, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataJunk(int argc, char* argv[])
|
||||
bool cbInstrDataJunk(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_junk, argc, argv);
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDataMiddle(int argc, char* argv[])
|
||||
bool cbInstrDataMiddle(int argc, char* argv[])
|
||||
{
|
||||
return cbInstrDataGeneric(enc_middle, argc, argv);
|
||||
}
|
||||
|
||||
#define towner "cmd"
|
||||
|
||||
CMDRESULT cbInstrAddType(int argc, char* argv[])
|
||||
bool cbInstrAddType(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!AddType(towner, argv[1], argv[2]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AddType failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("typedef %s %s;\n", argv[2], argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddStruct(int argc, char* argv[])
|
||||
bool cbInstrAddStruct(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!AddStruct(towner, argv[1]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AddStruct failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("struct %s;\n", argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddUnion(int argc, char* argv[])
|
||||
bool cbInstrAddUnion(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!AddUnion(towner, argv[1]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AddUnion failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("union %s;\n", argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddMember(int argc, char* argv[])
|
||||
bool cbInstrAddMember(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 4))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto parent = argv[1];
|
||||
auto type = argv[2];
|
||||
auto name = argv[3];
|
||||
|
@ -180,19 +180,19 @@ CMDRESULT cbInstrAddMember(int argc, char* argv[])
|
|||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[4], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
arrsize = int(value);
|
||||
if(argc > 4)
|
||||
{
|
||||
if(!valfromstring(argv[5], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
offset = int(value);
|
||||
}
|
||||
}
|
||||
if(!AddMember(parent, type, name, arrsize, offset))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AddMember failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("%s: %s %s", parent, type, name);
|
||||
if(arrsize > 0)
|
||||
|
@ -200,13 +200,13 @@ CMDRESULT cbInstrAddMember(int argc, char* argv[])
|
|||
if(offset >= 0)
|
||||
dprintf_untranslated(" (offset: %d)", offset);
|
||||
dputs_untranslated(";");
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAppendMember(int argc, char* argv[])
|
||||
bool cbInstrAppendMember(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto type = argv[1];
|
||||
auto name = argv[2];
|
||||
int arrsize = 0, offset = -1;
|
||||
|
@ -214,19 +214,19 @@ CMDRESULT cbInstrAppendMember(int argc, char* argv[])
|
|||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[3], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
arrsize = int(value);
|
||||
if(argc > 4)
|
||||
{
|
||||
if(!valfromstring(argv[4], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
offset = int(value);
|
||||
}
|
||||
}
|
||||
if(!AppendMember(type, name, arrsize, offset))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AppendMember failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("%s %s", type, name);
|
||||
if(arrsize > 0)
|
||||
|
@ -234,13 +234,13 @@ CMDRESULT cbInstrAppendMember(int argc, char* argv[])
|
|||
if(offset >= 0)
|
||||
dprintf_untranslated(" (offset: %d)", offset);
|
||||
dputs_untranslated(";");
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddFunction(int argc, char* argv[])
|
||||
bool cbInstrAddFunction(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto name = argv[1];
|
||||
auto rettype = argv[2];
|
||||
auto callconv = Cdecl;
|
||||
|
@ -258,65 +258,65 @@ CMDRESULT cbInstrAddFunction(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Unknown calling convention \"%s\"\n"), argv[3]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(argc > 4)
|
||||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[4], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
noreturn = value != 0;
|
||||
}
|
||||
}
|
||||
if(!AddFunction(towner, name, rettype, callconv, noreturn))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AddFunction failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("%s %s();\n", rettype, name);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAddArg(int argc, char* argv[])
|
||||
bool cbInstrAddArg(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 4))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!AddArg(argv[1], argv[2], argv[3]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AddArg failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("%s: %s %s;\n", argv[1], argv[2], argv[3]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrAppendArg(int argc, char* argv[])
|
||||
bool cbInstrAppendArg(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!AppendArg(argv[1], argv[2]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "AppendArg failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("%s %s;\n", argv[1], argv[2]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSizeofType(int argc, char* argv[])
|
||||
bool cbInstrSizeofType(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto size = SizeofType(argv[1]);
|
||||
if(!size)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "SizeofType failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("sizeof(%s) = %d\n", argv[1], size);
|
||||
varset("$result", size, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
struct PrintVisitor : TypeManager::Visitor
|
||||
|
@ -528,10 +528,10 @@ private:
|
|||
int mMaxPtrDepth = 0;
|
||||
};
|
||||
|
||||
CMDRESULT cbInstrVisitType(int argc, char* argv[])
|
||||
bool cbInstrVisitType(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
auto type = argv[1];
|
||||
auto name = "visit";
|
||||
duint addr = 0;
|
||||
|
@ -539,12 +539,12 @@ CMDRESULT cbInstrVisitType(int argc, char* argv[])
|
|||
if(argc > 2)
|
||||
{
|
||||
if(!valfromstring(argv[2], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(argc > 3)
|
||||
{
|
||||
duint value;
|
||||
if(!valfromstring(argv[3], &value, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
maxPtrDepth = int(value);
|
||||
if(argc > 4)
|
||||
name = argv[4];
|
||||
|
@ -554,34 +554,34 @@ CMDRESULT cbInstrVisitType(int argc, char* argv[])
|
|||
if(!VisitType(type, name, visitor))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "VisitType failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrClearTypes(int argc, char* argv[])
|
||||
bool cbInstrClearTypes(int argc, char* argv[])
|
||||
{
|
||||
auto owner = towner;
|
||||
if(argc > 1)
|
||||
owner = argv[1];
|
||||
ClearTypes(owner);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRemoveType(int argc, char* argv[])
|
||||
bool cbInstrRemoveType(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!RemoveType(argv[1]))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "RemoveType failed"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Type %s removed\n"), argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrEnumTypes(int argc, char* argv[])
|
||||
bool cbInstrEnumTypes(int argc, char* argv[])
|
||||
{
|
||||
std::vector<TypeManager::Summary> typeList;
|
||||
EnumTypes(typeList);
|
||||
|
@ -591,5 +591,5 @@ CMDRESULT cbInstrEnumTypes(int argc, char* argv[])
|
|||
type.owner.assign("x64dbg");
|
||||
dprintf_untranslated("%s: %s %s, sizeof(%s) = %d\n", type.owner.c_str(), type.kind.c_str(), type.name.c_str(), type.name.c_str(), type.size);
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2,36 +2,36 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrDataUnknown(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataByte(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataWord(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataDword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataFword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataQword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataTbyte(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataOword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataMmword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataXmmword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataYmmword(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataFloat(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataDouble(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataLongdouble(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataAscii(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataUnicode(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataCode(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataJunk(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDataMiddle(int argc, char* argv[]);
|
||||
bool cbInstrDataUnknown(int argc, char* argv[]);
|
||||
bool cbInstrDataByte(int argc, char* argv[]);
|
||||
bool cbInstrDataWord(int argc, char* argv[]);
|
||||
bool cbInstrDataDword(int argc, char* argv[]);
|
||||
bool cbInstrDataFword(int argc, char* argv[]);
|
||||
bool cbInstrDataQword(int argc, char* argv[]);
|
||||
bool cbInstrDataTbyte(int argc, char* argv[]);
|
||||
bool cbInstrDataOword(int argc, char* argv[]);
|
||||
bool cbInstrDataMmword(int argc, char* argv[]);
|
||||
bool cbInstrDataXmmword(int argc, char* argv[]);
|
||||
bool cbInstrDataYmmword(int argc, char* argv[]);
|
||||
bool cbInstrDataFloat(int argc, char* argv[]);
|
||||
bool cbInstrDataDouble(int argc, char* argv[]);
|
||||
bool cbInstrDataLongdouble(int argc, char* argv[]);
|
||||
bool cbInstrDataAscii(int argc, char* argv[]);
|
||||
bool cbInstrDataUnicode(int argc, char* argv[]);
|
||||
bool cbInstrDataCode(int argc, char* argv[]);
|
||||
bool cbInstrDataJunk(int argc, char* argv[]);
|
||||
bool cbInstrDataMiddle(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrAddType(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddStruct(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddUnion(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddMember(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAppendMember(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddFunction(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAddArg(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrAppendArg(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSizeofType(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrVisitType(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrClearTypes(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRemoveType(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrEnumTypes(int argc, char* argv[]);
|
||||
bool cbInstrAddType(int argc, char* argv[]);
|
||||
bool cbInstrAddStruct(int argc, char* argv[]);
|
||||
bool cbInstrAddUnion(int argc, char* argv[]);
|
||||
bool cbInstrAddMember(int argc, char* argv[]);
|
||||
bool cbInstrAppendMember(int argc, char* argv[]);
|
||||
bool cbInstrAddFunction(int argc, char* argv[]);
|
||||
bool cbInstrAddArg(int argc, char* argv[]);
|
||||
bool cbInstrAppendArg(int argc, char* argv[]);
|
||||
bool cbInstrSizeofType(int argc, char* argv[]);
|
||||
bool cbInstrVisitType(int argc, char* argv[]);
|
||||
bool cbInstrClearTypes(int argc, char* argv[]);
|
||||
bool cbInstrRemoveType(int argc, char* argv[]);
|
||||
bool cbInstrEnumTypes(int argc, char* argv[]);
|
|
@ -12,7 +12,7 @@
|
|||
#include "value.h"
|
||||
#include "symbolinfo.h"
|
||||
|
||||
CMDRESULT cbBadCmd(int argc, char* argv[])
|
||||
bool cbBadCmd(int argc, char* argv[])
|
||||
{
|
||||
duint value = 0;
|
||||
int valsize = 0;
|
||||
|
@ -90,12 +90,12 @@ CMDRESULT cbBadCmd(int argc, char* argv[])
|
|||
else //unknown command
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "unknown command/expression: \"%s\"\n"), *argv);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDebugBenchmark(int argc, char* argv[])
|
||||
bool cbDebugBenchmark(int argc, char* argv[])
|
||||
{
|
||||
duint addr = MemFindBaseAddr(GetContextDataEx(hActiveThread, UE_CIP), 0);
|
||||
DWORD ticks = GetTickCount();
|
||||
|
@ -107,104 +107,104 @@ CMDRESULT cbDebugBenchmark(int argc, char* argv[])
|
|||
FunctionAdd(i, i, false);
|
||||
}
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%ums\n"), GetTickCount() - ticks);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrSetstr(int argc, char* argv[])
|
||||
bool cbInstrSetstr(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
varnew(argv[1], 0, VAR_USER);
|
||||
if(!vargettype(argv[1], 0))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "no such variable \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!varset(argv[1], argv[2], false))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to set variable \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
cmddirectexec(StringUtils::sprintf("getstr \"%s\"", argv[1]).c_str());
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrGetstr(int argc, char* argv[])
|
||||
bool cbInstrGetstr(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
VAR_VALUE_TYPE valtype;
|
||||
if(!vargettype(argv[1], 0, &valtype))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "no such variable \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(valtype != VAR_STRING)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "variable \"%s\" is not a string!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
int size;
|
||||
if(!varget(argv[1], (char*)0, &size, 0) || !size)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to get variable size \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
Memory<char*> string(size + 1, "cbInstrGetstr:string");
|
||||
if(!varget(argv[1], string(), &size, 0))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to get variable data \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("%s=\"%s\"\n", argv[1], string());
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCopystr(int argc, char* argv[])
|
||||
bool cbInstrCopystr(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
VAR_VALUE_TYPE valtype;
|
||||
if(!vargettype(argv[2], 0, &valtype))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "no such variable \"%s\"!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(valtype != VAR_STRING)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "variable \"%s\" is not a string!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
int size;
|
||||
if(!varget(argv[2], (char*)0, &size, 0) || !size)
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to get variable size \"%s\"!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
Memory<char*> string(size + 1, "cbInstrGetstr:string");
|
||||
if(!varget(argv[2], string(), &size, 0))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "failed to get variable data \"%s\"!\n"), argv[2]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint addr;
|
||||
if(!valfromstring(argv[1], &addr))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid address \"%s\"!\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!MemPatch(addr, string(), strlen(string())))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "memwrite failed!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "string written!"));
|
||||
GuiUpdateAllViews();
|
||||
GuiUpdatePatches();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrLoopList(int argc, char* argv[])
|
||||
bool cbInstrLoopList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Loops")));
|
||||
|
@ -219,7 +219,7 @@ CMDRESULT cbInstrLoopList(int argc, char* argv[])
|
|||
if(!cbsize)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "no loops"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<LOOPSINFO*> loops(cbsize, "cbInstrLoopList:loops");
|
||||
LoopEnum(loops(), 0);
|
||||
|
@ -248,37 +248,37 @@ CMDRESULT cbInstrLoopList(int argc, char* argv[])
|
|||
varset("$result", count, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d loop(s) listed\n"), count);
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCapstone(int argc, char* argv[])
|
||||
bool cbInstrCapstone(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr) || !MemIsValidReadPtr(addr))
|
||||
{
|
||||
dprintf("invalid address \"%s\"\n", argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
unsigned char data[16];
|
||||
if(!MemRead(addr, data, sizeof(data)))
|
||||
{
|
||||
dprintf("could not read memory at %p\n", addr);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(argc > 2)
|
||||
if(!valfromstring(argv[2], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
|
||||
Capstone cp;
|
||||
if(!cp.Disassemble(addr, data))
|
||||
{
|
||||
dputs("failed to disassemble!\n");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
const cs_insn* instr = cp.GetInstr();
|
||||
|
@ -313,19 +313,19 @@ CMDRESULT cbInstrCapstone(int argc, char* argv[])
|
|||
}
|
||||
}
|
||||
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrVisualize(int argc, char* argv[])
|
||||
bool cbInstrVisualize(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint start;
|
||||
duint maxaddr;
|
||||
if(!valfromstring(argv[1], &start) || !valfromstring(argv[2], &maxaddr))
|
||||
{
|
||||
dputs("invalid arguments!");
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
//actual algorithm
|
||||
//make sure to set these options in the INI (rest the default theme of x64dbg):
|
||||
|
@ -409,21 +409,21 @@ CMDRESULT cbInstrVisualize(int argc, char* argv[])
|
|||
SetContextDataEx(fdProcessInfo->hThread, UE_CIP, start);
|
||||
DebugUpdateGuiAsync(start, false);
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrMeminfo(int argc, char* argv[])
|
||||
bool cbInstrMeminfo(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 3)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "usage: meminfo a/r, addr"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint addr;
|
||||
if(!valfromstring(argv[2], &addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "invalid argument"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(argv[1][0] == 'a')
|
||||
{
|
||||
|
@ -439,20 +439,20 @@ CMDRESULT cbInstrMeminfo(int argc, char* argv[])
|
|||
GuiUpdateMemoryView();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "memory map updated!"));
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBriefcheck(int argc, char* argv[])
|
||||
bool cbInstrBriefcheck(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint size;
|
||||
auto base = DbgMemFindBaseAddr(addr, &size);
|
||||
if(!base)
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
Memory<unsigned char*> buffer(size + 16);
|
||||
DbgMemRead(base, buffer(), size);
|
||||
Capstone cp;
|
||||
|
@ -472,13 +472,13 @@ CMDRESULT cbInstrBriefcheck(int argc, char* argv[])
|
|||
reported.insert(mnem);
|
||||
dprintf("%p: %s\n", cp.Address(), mnem.c_str());
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFocusinfo(int argc, char* argv[])
|
||||
bool cbInstrFocusinfo(int argc, char* argv[])
|
||||
{
|
||||
ACTIVEVIEW activeView;
|
||||
GuiGetActiveView(&activeView);
|
||||
dprintf("activeTitle: %s, activeClass: %s\n", activeView.title, activeView.className);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbBadCmd(int argc, char* argv[]);
|
||||
CMDRESULT cbDebugBenchmark(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrSetstr(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrGetstr(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCopystr(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrLoopList(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCapstone(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrVisualize(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrMeminfo(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrBriefcheck(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFocusinfo(int argc, char* argv[]);
|
||||
bool cbBadCmd(int argc, char* argv[]);
|
||||
bool cbDebugBenchmark(int argc, char* argv[]);
|
||||
bool cbInstrSetstr(int argc, char* argv[]);
|
||||
bool cbInstrGetstr(int argc, char* argv[]);
|
||||
bool cbInstrCopystr(int argc, char* argv[]);
|
||||
bool cbInstrLoopList(int argc, char* argv[]);
|
||||
bool cbInstrCapstone(int argc, char* argv[]);
|
||||
bool cbInstrVisualize(int argc, char* argv[]);
|
||||
bool cbInstrMeminfo(int argc, char* argv[]);
|
||||
bool cbInstrBriefcheck(int argc, char* argv[]);
|
||||
bool cbInstrFocusinfo(int argc, char* argv[]);
|
|
@ -9,60 +9,60 @@
|
|||
#include "function.h"
|
||||
#include "argument.h"
|
||||
|
||||
CMDRESULT cbInstrDbsave(int argc, char* argv[])
|
||||
bool cbInstrDbsave(int argc, char* argv[])
|
||||
{
|
||||
DbSave(DbLoadSaveType::All, argc > 1 ? argv[1] : nullptr, argc > 1);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDbload(int argc, char* argv[])
|
||||
bool cbInstrDbload(int argc, char* argv[])
|
||||
{
|
||||
if(argc <= 1)
|
||||
DbClear();
|
||||
DbLoad(DbLoadSaveType::All, argc > 1 ? argv[1] : nullptr);
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrDbclear(int argc, char* argv[])
|
||||
bool cbInstrDbclear(int argc, char* argv[])
|
||||
{
|
||||
DbClear();
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCommentSet(int argc, char* argv[])
|
||||
bool cbInstrCommentSet(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!CommentSet(addr, argv[2], true))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "error setting comment"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCommentDel(int argc, char* argv[])
|
||||
bool cbInstrCommentDel(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!CommentDelete(addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "error deleting comment"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCommentList(int argc, char* argv[])
|
||||
bool cbInstrCommentList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Comments")));
|
||||
|
@ -76,7 +76,7 @@ CMDRESULT cbInstrCommentList(int argc, char* argv[])
|
|||
if(!cbsize)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "no comments"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<COMMENTSINFO*> comments(cbsize, "cbInstrCommentList:comments");
|
||||
CommentEnum(comments(), 0);
|
||||
|
@ -95,49 +95,49 @@ CMDRESULT cbInstrCommentList(int argc, char* argv[])
|
|||
varset("$result", count, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d comment(s) listed in Reference View\n"), count);
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrCommentClear(int argc, char* argv[])
|
||||
bool cbInstrCommentClear(int argc, char* argv[])
|
||||
{
|
||||
CommentClear();
|
||||
GuiUpdateAllViews();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "all comments deleted!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrLabelSet(int argc, char* argv[])
|
||||
bool cbInstrLabelSet(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!LabelSet(addr, argv[2], true))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "error setting label"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrLabelDel(int argc, char* argv[])
|
||||
bool cbInstrLabelDel(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!LabelDelete(addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "error deleting label"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrLabelList(int argc, char* argv[])
|
||||
bool cbInstrLabelList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Labels")));
|
||||
|
@ -151,7 +151,7 @@ CMDRESULT cbInstrLabelList(int argc, char* argv[])
|
|||
if(!cbsize)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "no labels"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<LABELSINFO*> labels(cbsize, "cbInstrLabelList:labels");
|
||||
LabelEnum(labels(), 0);
|
||||
|
@ -170,50 +170,50 @@ CMDRESULT cbInstrLabelList(int argc, char* argv[])
|
|||
varset("$result", count, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d label(s) listed in Reference View\n"), count);
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrLabelClear(int argc, char* argv[])
|
||||
bool cbInstrLabelClear(int argc, char* argv[])
|
||||
{
|
||||
LabelClear();
|
||||
GuiUpdateAllViews();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "all labels deleted!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBookmarkSet(int argc, char* argv[])
|
||||
bool cbInstrBookmarkSet(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!BookmarkSet(addr, true))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to set bookmark!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "bookmark set!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBookmarkDel(int argc, char* argv[])
|
||||
bool cbInstrBookmarkDel(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!BookmarkDelete(addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to delete bookmark!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "bookmark deleted!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
|
||||
bool cbInstrBookmarkList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Bookmarks")));
|
||||
|
@ -227,7 +227,7 @@ CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
|
|||
if(!cbsize)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No bookmarks found"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<BOOKMARKSINFO*> bookmarks(cbsize, "cbInstrBookmarkList:bookmarks");
|
||||
BookmarkEnum(bookmarks(), 0);
|
||||
|
@ -254,53 +254,53 @@ CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
|
|||
varset("$result", count, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d bookmark(s) listed\n"), count);
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBookmarkClear(int argc, char* argv[])
|
||||
bool cbInstrBookmarkClear(int argc, char* argv[])
|
||||
{
|
||||
LabelClear();
|
||||
GuiUpdateAllViews();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "all bookmarks deleted!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFunctionAdd(int argc, char* argv[])
|
||||
bool cbInstrFunctionAdd(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint start = 0;
|
||||
duint end = 0;
|
||||
if(!valfromstring(argv[1], &start, false) || !valfromstring(argv[2], &end, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!FunctionAdd(start, end, true))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to add function"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "function added!"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFunctionDel(int argc, char* argv[])
|
||||
bool cbInstrFunctionDel(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!FunctionDelete(addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to delete function"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "function deleted!"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFunctionList(int argc, char* argv[])
|
||||
bool cbInstrFunctionList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Functions")));
|
||||
|
@ -315,7 +315,7 @@ CMDRESULT cbInstrFunctionList(int argc, char* argv[])
|
|||
if(!cbsize)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No functions"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<FUNCTIONSINFO*> functions(cbsize, "cbInstrFunctionList:functions");
|
||||
FunctionEnum(functions(), 0);
|
||||
|
@ -344,53 +344,53 @@ CMDRESULT cbInstrFunctionList(int argc, char* argv[])
|
|||
varset("$result", count, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d function(s) listed\n"), count);
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrFunctionClear(int argc, char* argv[])
|
||||
bool cbInstrFunctionClear(int argc, char* argv[])
|
||||
{
|
||||
FunctionClear();
|
||||
GuiUpdateAllViews();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "all functions deleted!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrArgumentAdd(int argc, char* argv[])
|
||||
bool cbInstrArgumentAdd(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 3))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint start = 0;
|
||||
duint end = 0;
|
||||
if(!valfromstring(argv[1], &start, false) || !valfromstring(argv[2], &end, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ArgumentAdd(start, end, true))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to add argument"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "argument added!"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrArgumentDel(int argc, char* argv[])
|
||||
bool cbInstrArgumentDel(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
duint addr = 0;
|
||||
if(!valfromstring(argv[1], &addr, false))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!ArgumentDelete(addr))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "failed to delete argument"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "argument deleted!"));
|
||||
GuiUpdateAllViews();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrArgumentList(int argc, char* argv[])
|
||||
bool cbInstrArgumentList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Arguments")));
|
||||
|
@ -405,7 +405,7 @@ CMDRESULT cbInstrArgumentList(int argc, char* argv[])
|
|||
if(!cbsize)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No arguments"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<ARGUMENTSINFO*> arguments(cbsize, "cbInstrArgumentList:arguments");
|
||||
ArgumentEnum(arguments(), 0);
|
||||
|
@ -434,13 +434,13 @@ CMDRESULT cbInstrArgumentList(int argc, char* argv[])
|
|||
varset("$result", count, false);
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "%d argument(s) listed\n"), count);
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrArgumentClear(int argc, char* argv[])
|
||||
bool cbInstrArgumentClear(int argc, char* argv[])
|
||||
{
|
||||
ArgumentClear();
|
||||
GuiUpdateAllViews();
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "all arguments deleted!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrDbsave(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDbload(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrDbclear(int argc, char* argv[]);
|
||||
bool cbInstrDbsave(int argc, char* argv[]);
|
||||
bool cbInstrDbload(int argc, char* argv[]);
|
||||
bool cbInstrDbclear(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrCommentSet(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCommentDel(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCommentList(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrCommentClear(int argc, char* argv[]);
|
||||
bool cbInstrCommentSet(int argc, char* argv[]);
|
||||
bool cbInstrCommentDel(int argc, char* argv[]);
|
||||
bool cbInstrCommentList(int argc, char* argv[]);
|
||||
bool cbInstrCommentClear(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrLabelSet(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrLabelDel(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrLabelList(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrLabelClear(int argc, char* argv[]);
|
||||
bool cbInstrLabelSet(int argc, char* argv[]);
|
||||
bool cbInstrLabelDel(int argc, char* argv[]);
|
||||
bool cbInstrLabelList(int argc, char* argv[]);
|
||||
bool cbInstrLabelClear(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrBookmarkSet(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrBookmarkDel(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrBookmarkList(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrBookmarkClear(int argc, char* argv[]);
|
||||
bool cbInstrBookmarkSet(int argc, char* argv[]);
|
||||
bool cbInstrBookmarkDel(int argc, char* argv[]);
|
||||
bool cbInstrBookmarkList(int argc, char* argv[]);
|
||||
bool cbInstrBookmarkClear(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrFunctionAdd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFunctionDel(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFunctionList(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrFunctionClear(int argc, char* argv[]);
|
||||
bool cbInstrFunctionAdd(int argc, char* argv[]);
|
||||
bool cbInstrFunctionDel(int argc, char* argv[]);
|
||||
bool cbInstrFunctionList(int argc, char* argv[]);
|
||||
bool cbInstrFunctionClear(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrArgumentAdd(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrArgumentDel(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrArgumentList(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrArgumentClear(int argc, char* argv[]);
|
||||
bool cbInstrArgumentAdd(int argc, char* argv[]);
|
||||
bool cbInstrArgumentDel(int argc, char* argv[]);
|
||||
bool cbInstrArgumentList(int argc, char* argv[]);
|
||||
bool cbInstrArgumentClear(int argc, char* argv[]);
|
||||
|
||||
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
#include "variable.h"
|
||||
#include "value.h"
|
||||
|
||||
CMDRESULT cbInstrVar(int argc, char* argv[])
|
||||
bool cbInstrVar(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
char arg2[deflen] = ""; //var value (optional)
|
||||
if(argc > 2)
|
||||
strcpy_s(arg2, argv[2]);
|
||||
|
@ -17,17 +17,17 @@ CMDRESULT cbInstrVar(int argc, char* argv[])
|
|||
if(valfromstring(argv[1] + add, &value))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid variable name \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!valfromstring(arg2, &value))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "invalid value \"%s\"\n"), arg2);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
if(!varnew(argv[1], value, VAR_USER))
|
||||
{
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "error creating variable \"%s\"\n"), argv[1]);
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -44,21 +44,21 @@ CMDRESULT cbInstrVar(int argc, char* argv[])
|
|||
dprintf_untranslated("%s=%X\n", argv[1], value);
|
||||
#endif //_WIN64
|
||||
}
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrVarDel(int argc, char* argv[])
|
||||
bool cbInstrVarDel(int argc, char* argv[])
|
||||
{
|
||||
if(IsArgumentsLessThan(argc, 2))
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
if(!vardel(argv[1], false))
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "could not delete variable \"%s\"\n"), argv[1]);
|
||||
else
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "deleted variable \"%s\"\n"), argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrVarList(int argc, char* argv[])
|
||||
bool cbInstrVarList(int argc, char* argv[])
|
||||
{
|
||||
int filter = 0;
|
||||
if(argc > 1)
|
||||
|
@ -75,13 +75,13 @@ CMDRESULT cbInstrVarList(int argc, char* argv[])
|
|||
if(!varenum(0, &cbsize))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "no variables!"));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
Memory<VAR*> variables(cbsize, "cbInstrVarList:variables");
|
||||
if(!varenum(variables(), 0))
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "error listing variables!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
|
||||
GuiReferenceInitialize(GuiTranslateText(QT_TRANSLATE_NOOP("DBG", "Variables")));
|
||||
|
@ -133,5 +133,5 @@ CMDRESULT cbInstrVarList(int argc, char* argv[])
|
|||
}
|
||||
}
|
||||
GuiReferenceReloadData();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbInstrVar(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrVarDel(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrVarList(int argc, char* argv[]);
|
||||
bool cbInstrVar(int argc, char* argv[]);
|
||||
bool cbInstrVarDel(int argc, char* argv[]);
|
||||
bool cbInstrVarList(int argc, char* argv[]);
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
#include "console.h"
|
||||
#include "threading.h"
|
||||
|
||||
CMDRESULT cbAddWatch(int argc, char* argv[])
|
||||
bool cbAddWatch(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No enough arguments for addwatch\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
WATCHVARTYPE newtype = WATCHVARTYPE::TYPE_UINT;
|
||||
if(argc > 2)
|
||||
|
@ -27,40 +27,40 @@ CMDRESULT cbAddWatch(int argc, char* argv[])
|
|||
}
|
||||
unsigned int newid = WatchAddExpr(argv[1], newtype);
|
||||
varset("$result", newid, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbDelWatch(int argc, char* argv[])
|
||||
bool cbDelWatch(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No enough arguments for delwatch\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint id;
|
||||
bool ok = valfromstring(argv[1], &id);
|
||||
if(!ok)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error expression in argument 1.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
WatchDelete((unsigned int)id);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbSetWatchdog(int argc, char* argv[])
|
||||
bool cbSetWatchdog(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No enough arguments for delwatch\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint id;
|
||||
bool ok = valfromstring(argv[1], &id);
|
||||
if(!ok)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error expression in argument 1.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
WATCHDOGMODE mode;
|
||||
if(argc > 2)
|
||||
|
@ -78,21 +78,21 @@ CMDRESULT cbSetWatchdog(int argc, char* argv[])
|
|||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Unknown watchdog mode.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
mode = (WatchGetWatchdogEnabled((unsigned int)id) == WATCHDOGMODE::MODE_DISABLED) ? WATCHDOGMODE::MODE_CHANGED : WATCHDOGMODE::MODE_DISABLED;
|
||||
WatchSetWatchdogMode((unsigned int)id, mode);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
CMDRESULT cbSetWatchExpression(int argc, char* argv[])
|
||||
bool cbSetWatchExpression(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 3)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No enough arguments for SetWatchExpression"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint id;
|
||||
bool ok = valfromstring(argv[1], &id);
|
||||
|
@ -117,37 +117,37 @@ CMDRESULT cbSetWatchExpression(int argc, char* argv[])
|
|||
else
|
||||
varType = WATCHVARTYPE::TYPE_UINT;
|
||||
WatchModifyExpr((unsigned int)id, argv[2], varType);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error expression in argument 1.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
CMDRESULT cbSetWatchName(int argc, char* argv[])
|
||||
bool cbSetWatchName(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 3)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "No enough arguments for SetWatchName"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
duint id;
|
||||
bool ok = valfromstring(argv[1], &id);
|
||||
if(ok)
|
||||
{
|
||||
WatchModifyName((unsigned int)id, argv[2]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "Error expression in argument 1.\n"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
CMDRESULT cbCheckWatchdog(int argc, char* argv[])
|
||||
bool cbCheckWatchdog(int argc, char* argv[])
|
||||
{
|
||||
EXCLUSIVE_ACQUIRE(LockWatch);
|
||||
bool watchdogTriggered = false;
|
||||
|
@ -162,5 +162,5 @@ CMDRESULT cbCheckWatchdog(int argc, char* argv[])
|
|||
if(watchdogTriggered)
|
||||
GuiUpdateWatchViewAsync();
|
||||
varset("$result", watchdogTriggered ? 1 : 0, false);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
#include "command.h"
|
||||
|
||||
CMDRESULT cbAddWatch(int argc, char* argv[]);
|
||||
CMDRESULT cbDelWatch(int argc, char* argv[]);
|
||||
CMDRESULT cbSetWatchdog(int argc, char* argv[]);
|
||||
CMDRESULT cbSetWatchExpression(int argc, char* argv[]);
|
||||
CMDRESULT cbSetWatchName(int argc, char* argv[]);
|
||||
CMDRESULT cbCheckWatchdog(int argc, char* argv[]);
|
||||
bool cbAddWatch(int argc, char* argv[]);
|
||||
bool cbDelWatch(int argc, char* argv[]);
|
||||
bool cbSetWatchdog(int argc, char* argv[]);
|
||||
bool cbSetWatchExpression(int argc, char* argv[]);
|
||||
bool cbSetWatchName(int argc, char* argv[]);
|
||||
bool cbCheckWatchdog(int argc, char* argv[]);
|
|
@ -22,6 +22,14 @@ static bool volatile bAbort = false;
|
|||
|
||||
static bool volatile bIsRunning = false;
|
||||
|
||||
enum CMDRESULT
|
||||
{
|
||||
STATUS_ERROR = false,
|
||||
STATUS_CONTINUE = true,
|
||||
STATUS_EXIT = 2,
|
||||
STATUS_PAUSE = 3
|
||||
};
|
||||
|
||||
static SCRIPTBRANCHTYPE scriptgetbranchtype(const char* text)
|
||||
{
|
||||
char newtext[MAX_SCRIPT_LINE_SIZE] = "";
|
||||
|
@ -317,10 +325,10 @@ static CMDRESULT scriptinternalcmdexec(const char* cmd)
|
|||
return STATUS_PAUSE;
|
||||
else if(scriptisinternalcommand(cmd, "nop")) //do nothing
|
||||
return STATUS_CONTINUE;
|
||||
CMDRESULT res = cmddirectexec(cmd);
|
||||
auto res = cmddirectexec(cmd);
|
||||
while(DbgIsDebugging() && dbgisrunning() && !bAbort) //while not locked (NOTE: possible deadlock)
|
||||
Sleep(1);
|
||||
return res;
|
||||
return res ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
}
|
||||
|
||||
static bool scriptinternalbranch(SCRIPTBRANCHTYPE type) //determine if we should jump
|
||||
|
|
|
@ -34,42 +34,42 @@ static bool bIsStopped = true;
|
|||
static char scriptDllDir[MAX_PATH] = "";
|
||||
static String notesFile;
|
||||
|
||||
static CMDRESULT cbStrLen(int argc, char* argv[])
|
||||
static bool cbStrLen(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
dprintf_untranslated("\"%s\"[%d]\n", argv[1], int(strlen(argv[1])));
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static CMDRESULT cbClearLog(int argc, char* argv[])
|
||||
static bool cbClearLog(int argc, char* argv[])
|
||||
{
|
||||
GuiLogClear();
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static CMDRESULT cbPrintf(int argc, char* argv[])
|
||||
static bool cbPrintf(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
dprintf("\n");
|
||||
else
|
||||
dprintf("%s", argv[1]);
|
||||
return STATUS_CONTINUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool DbgScriptDllExec(const char* dll);
|
||||
|
||||
static CMDRESULT cbScriptDll(int argc, char* argv[])
|
||||
static bool cbScriptDll(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs(QT_TRANSLATE_NOOP("DBG", "not enough arguments!"));
|
||||
return STATUS_ERROR;
|
||||
return false;
|
||||
}
|
||||
return DbgScriptDllExec(argv[1]) ? STATUS_CONTINUE : STATUS_ERROR;
|
||||
return DbgScriptDllExec(argv[1]);
|
||||
}
|
||||
|
||||
#include "cmd-all.h"
|
||||
|
@ -759,7 +759,7 @@ extern "C" DLL_EXPORT void _dbg_dbgexitsignal()
|
|||
|
||||
extern "C" DLL_EXPORT bool _dbg_dbgcmddirectexec(const char* cmd)
|
||||
{
|
||||
if(cmddirectexec(cmd) == STATUS_ERROR)
|
||||
if(cmddirectexec(cmd) == false)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue