From a3ec27853cbf27e33f215172d44ae13cd8f73368 Mon Sep 17 00:00:00 2001 From: "mr.exodia" Date: Sat, 22 Feb 2014 15:34:34 +0100 Subject: [PATCH] PROJECT: updated BeaEngine (r8L -> r8b) DBG: updated internal function 'valfromstring' to be more friendly DBG: updated valfromstring to only look for the value of registers/memory/addr (this is faster) --- bin/x32/BeaEngine.dll | Bin 255283 -> 255283 bytes bin/x64/BeaEngine.dll | Bin 523006 -> 523006 bytes x64_dbg.sln | 30 ++++++++++++------------ x64_dbg_dbg/_exports.cpp | 2 +- x64_dbg_dbg/debugger.cpp | 40 ++++++++++++++++---------------- x64_dbg_dbg/disasm_helper.cpp | 8 +++---- x64_dbg_dbg/instruction.cpp | 42 ++++++++++++++++------------------ x64_dbg_dbg/math.cpp | 20 +++++++--------- x64_dbg_dbg/math.h | 4 ++-- x64_dbg_dbg/value.cpp | 28 +++++++++++++++++++---- x64_dbg_dbg/value.h | 5 +++- 11 files changed, 96 insertions(+), 83 deletions(-) diff --git a/bin/x32/BeaEngine.dll b/bin/x32/BeaEngine.dll index 4b0f640a531e5789f558e18f7865d3beeec86eb6..c6a45f6f3178c33245d97cad62b6362a3e407a76 100644 GIT binary patch delta 130 zcmdmdihuJd{s|o{9Gf|UC-(R-btyOAYQ4qSdW&i6EoKd6t0V>xD6)joh6Z3pk)a`! zHiFW|P}&4anou@hYPcvfKzIsYhHS0UaDS7P7ct}?O`s=cNYKvJ(VIl delta 130 zcmdmdihuJd{s|o{iZh#nCieI+HD@*6YQ4qSdW&i6EoKd6D<1|BD6)joh6Z3pk)a`! zHiFW|P}&4aoBC|GQDHtI4>ou@hYPcvKu%_oQ);4XUV3I;s$NP?&h{`D=DQ03d*LJT diff --git a/bin/x64/BeaEngine.dll b/bin/x64/BeaEngine.dll index 5b7e4b791d39a28bca81bf7458f77cbb798b055e..da7740af0ec5b0b5c039797aa9e3afacd04c7bdf 100644 GIT binary patch delta 148 zcmezORsP>s`3W5?e>QOhPweqw%9d-q)q0Du^%hg>E#|GaSUPyEk{Cds$P!8$8h{x^ zhK5ku2ud46X%i@InzVfmA4^6c*zD;X2`qNPPN|8mdFh#Xsd_0nIbdTM+9MNKfS47C M*|tX}urHkj0CWl}rT_o{ delta 148 zcmezORsP>s`3W5?uVyp_P3-Yu;!AD3)q0Du^%hg>E#|GaSUPyEd>BBW$P!8$8h{x^ zhK5ku2ud46X%i@I>a%?gA4^6c*zD;X2`qNPIhjdLsfn(6>6v+{@n$A^DLFaqkqIn7 P%nHP8+anX$m(BtJk-RK= diff --git a/x64_dbg.sln b/x64_dbg.sln index 7e3a9051..fe287546 100644 --- a/x64_dbg.sln +++ b/x64_dbg.sln @@ -1,11 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x64_dbg_bridge", "x64_dbg_bridge\x64_dbg_bridge.vcxproj", "{673CBB44-08B5-54E0-E77B-E13E3BD8D967}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x64_dbg_bridge", "x64_dbg_bridge\x64_dbg_bridge.vcxproj", "{944D9923-CB1A-6F6C-BCBC-9E00A71954C1}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x64_dbg_exe", "x64_dbg_exe\x64_dbg_exe.vcxproj", "{F633E592-F510-42C4-A68D-602F54BE22EF}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x64_dbg_exe", "x64_dbg_exe\x64_dbg_exe.vcxproj", "{3A22175E-6B72-FDCC-1603-C4A2163C7900}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x64_dbg_dbg", "x64_dbg_dbg\x64_dbg_dbg.vcxproj", "{C84269E0-6E03-389A-C4E9-9EF93C23AB9F}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x64_dbg_dbg", "x64_dbg_dbg\x64_dbg_dbg.vcxproj", "{E6548308-401E-3A8A-5819-905DB90522A6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,18 +13,18 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {673CBB44-08B5-54E0-E77B-E13E3BD8D967}.Release|Win32.ActiveCfg = Release|Win32 - {673CBB44-08B5-54E0-E77B-E13E3BD8D967}.Release|Win32.Build.0 = Release|Win32 - {673CBB44-08B5-54E0-E77B-E13E3BD8D967}.Release|x64.ActiveCfg = Release|x64 - {673CBB44-08B5-54E0-E77B-E13E3BD8D967}.Release|x64.Build.0 = Release|x64 - {F633E592-F510-42C4-A68D-602F54BE22EF}.Release|Win32.ActiveCfg = Release|Win32 - {F633E592-F510-42C4-A68D-602F54BE22EF}.Release|Win32.Build.0 = Release|Win32 - {F633E592-F510-42C4-A68D-602F54BE22EF}.Release|x64.ActiveCfg = Release|x64 - {F633E592-F510-42C4-A68D-602F54BE22EF}.Release|x64.Build.0 = Release|x64 - {C84269E0-6E03-389A-C4E9-9EF93C23AB9F}.Release|Win32.ActiveCfg = Release|Win32 - {C84269E0-6E03-389A-C4E9-9EF93C23AB9F}.Release|Win32.Build.0 = Release|Win32 - {C84269E0-6E03-389A-C4E9-9EF93C23AB9F}.Release|x64.ActiveCfg = Release|x64 - {C84269E0-6E03-389A-C4E9-9EF93C23AB9F}.Release|x64.Build.0 = Release|x64 + {944D9923-CB1A-6F6C-BCBC-9E00A71954C1}.Release|Win32.ActiveCfg = Release|Win32 + {944D9923-CB1A-6F6C-BCBC-9E00A71954C1}.Release|Win32.Build.0 = Release|Win32 + {944D9923-CB1A-6F6C-BCBC-9E00A71954C1}.Release|x64.ActiveCfg = Release|x64 + {944D9923-CB1A-6F6C-BCBC-9E00A71954C1}.Release|x64.Build.0 = Release|x64 + {3A22175E-6B72-FDCC-1603-C4A2163C7900}.Release|Win32.ActiveCfg = Release|Win32 + {3A22175E-6B72-FDCC-1603-C4A2163C7900}.Release|Win32.Build.0 = Release|Win32 + {3A22175E-6B72-FDCC-1603-C4A2163C7900}.Release|x64.ActiveCfg = Release|x64 + {3A22175E-6B72-FDCC-1603-C4A2163C7900}.Release|x64.Build.0 = Release|x64 + {E6548308-401E-3A8A-5819-905DB90522A6}.Release|Win32.ActiveCfg = Release|Win32 + {E6548308-401E-3A8A-5819-905DB90522A6}.Release|Win32.Build.0 = Release|Win32 + {E6548308-401E-3A8A-5819-905DB90522A6}.Release|x64.ActiveCfg = Release|x64 + {E6548308-401E-3A8A-5819-905DB90522A6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/x64_dbg_dbg/_exports.cpp b/x64_dbg_dbg/_exports.cpp index c68e821d..435942e7 100644 --- a/x64_dbg_dbg/_exports.cpp +++ b/x64_dbg_dbg/_exports.cpp @@ -70,7 +70,7 @@ extern "C" DLL_EXPORT bool _dbg_memisvalidreadptr(duint addr) extern "C" DLL_EXPORT bool _dbg_valfromstring(const char* string, duint* value) { - return valfromstring(string, value, 0, 0, true, 0); + return valfromstring(string, value); } extern "C" DLL_EXPORT bool _dbg_isdebugging() diff --git a/x64_dbg_dbg/debugger.cpp b/x64_dbg_dbg/debugger.cpp index 1a023efa..e0004054 100644 --- a/x64_dbg_dbg/debugger.cpp +++ b/x64_dbg_dbg/debugger.cpp @@ -648,7 +648,7 @@ static DWORD WINAPI threadDebugLoop(void* lpParameter) SetCustomHandler(UE_CH_UNLOADDLL, (void*)cbUnloadDll); SetCustomHandler(UE_CH_OUTPUTDEBUGSTRING, (void*)cbOutputDebugString); SetCustomHandler(UE_CH_UNHANDLEDEXCEPTION, (void*)cbException); - //inform GUI start we started without problems + //inform GUI we started without problems GuiSetDebugState(initialized); //set GUI title strcpy(szBaseFileName, szFileName); @@ -821,7 +821,7 @@ CMDRESULT cbDebugSetBPX(int argc, char* argv[]) //bp addr [,name [,type]] } _strlwr(argtype); uint addr=0; - if(!valfromstring(argaddr, &addr, 0, 0, true, 0)) + if(!valfromstring(argaddr, &addr)) { dprintf("invalid addr: \"%s\"\n", argaddr); return STATUS_ERROR; @@ -895,7 +895,7 @@ CMDRESULT cbDebugDeleteBPX(int argc, char* argv[]) return STATUS_CONTINUE; } uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0) or !bpget(addr, BPNORMAL, 0, &found)) //invalid breakpoint + if(!valfromstring(arg1, &addr) or !bpget(addr, BPNORMAL, 0, &found)) //invalid breakpoint { dprintf("no such breakpoint \"%s\"\n", arg1); return STATUS_ERROR; @@ -948,7 +948,7 @@ CMDRESULT cbDebugEnableBPX(int argc, char* argv[]) return STATUS_CONTINUE; } uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0) or !bpget(addr, BPNORMAL, 0, &found)) //invalid breakpoint + if(!valfromstring(arg1, &addr) or !bpget(addr, BPNORMAL, 0, &found)) //invalid breakpoint { dprintf("no such breakpoint \"%s\"\n", arg1); return STATUS_ERROR; @@ -1007,7 +1007,7 @@ CMDRESULT cbDebugDisableBPX(int argc, char* argv[]) return STATUS_CONTINUE; } uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0) or !bpget(addr, BPNORMAL, 0, &found)) //invalid breakpoint + if(!valfromstring(arg1, &addr) or !bpget(addr, BPNORMAL, 0, &found)) //invalid breakpoint { dprintf("no such breakpoint \"%s\"\n", arg1); return STATUS_ERROR; @@ -1087,7 +1087,7 @@ CMDRESULT cbDebugSingleStep(int argc, char* argv[]) uint stepcount=1; if(argget(*argv, arg1, 0, true)) { - if(!valfromstring(arg1, &stepcount, 0, 0, true, 0)) + if(!valfromstring(arg1, &stepcount)) stepcount=1; } SingleStep((DWORD)stepcount, (void*)cbStep); @@ -1115,7 +1115,7 @@ CMDRESULT cbDebugDisasm(int argc, char* argv[]) char arg1[deflen]=""; uint addr=GetContextData(UE_CIP); if(argget(*argv, arg1, 0, true)) - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) addr=GetContextData(UE_CIP); DebugUpdateGui(addr); return STATUS_CONTINUE; @@ -1127,7 +1127,7 @@ CMDRESULT cbDebugSetMemoryBpx(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) return STATUS_ERROR; bool restore=false; char arg2[deflen]=""; //restore @@ -1224,7 +1224,7 @@ CMDRESULT cbDebugDeleteMemoryBreakpoint(int argc, char* argv[]) return STATUS_CONTINUE; } uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0) or !bpget(addr, BPMEMORY, 0, &found)) //invalid breakpoint + if(!valfromstring(arg1, &addr) or !bpget(addr, BPMEMORY, 0, &found)) //invalid breakpoint { dprintf("no such memory breakpoint \"%s\"\n", arg1); return STATUS_ERROR; @@ -1260,7 +1260,7 @@ CMDRESULT cbDebugSetHardwareBreakpoint(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) return STATUS_ERROR; uint type=UE_HARDWARE_EXECUTE; char arg2[deflen]=""; //type @@ -1285,7 +1285,7 @@ CMDRESULT cbDebugSetHardwareBreakpoint(int argc, char* argv[]) uint size=UE_HARDWARE_SIZE_1; if(argget(*argv, arg3, 2, true)) { - if(!valfromstring(arg3, &size, 0, 0, true, 0)) + if(!valfromstring(arg3, &size)) return STATUS_ERROR; switch(size) { @@ -1372,7 +1372,7 @@ CMDRESULT cbDebugDeleteHardwareBreakpoint(int argc, char* argv[]) return STATUS_CONTINUE; } uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0) or !bpget(addr, BPHARDWARE, 0, &found)) //invalid breakpoint + if(!valfromstring(arg1, &addr) or !bpget(addr, BPHARDWARE, 0, &found)) //invalid breakpoint { dprintf("no such hardware breakpoint \"%s\"\n", arg1); return STATUS_ERROR; @@ -1392,7 +1392,7 @@ CMDRESULT cbDebugAlloc(int argc, char* argv[]) char arg1[deflen]=""; //size uint size=0x1000; if(argget(*argv, arg1, 0, true)) - if(!valfromstring(arg1, &size, 0, 0, false, 0)) + if(!valfromstring(arg1, &size, false)) return STATUS_ERROR; uint mem=(uint)memalloc(fdProcessInfo->hProcess, 0, size, PAGE_EXECUTE_READWRITE); if(!mem) @@ -1413,7 +1413,7 @@ CMDRESULT cbDebugFree(int argc, char* argv[]) uint addr=lastalloc; if(argget(*argv, arg1, 0, true)) { - if(!valfromstring(arg1, &addr, 0, 0, false, 0)) + if(!valfromstring(arg1, &addr, false)) return STATUS_ERROR; } else if(!lastalloc) @@ -1440,11 +1440,11 @@ CMDRESULT cbDebugMemset(int argc, char* argv[]) uint size; if(!argget(*argv, arg1, 0, false) or !argget(*argv, arg2, 1, false)) return STATUS_ERROR; - if(!valfromstring(arg1, &addr, 0, 0, false, 0) or !valfromstring(arg2, &value, 0, 0, false, 0)) + if(!valfromstring(arg1, &addr, false) or !valfromstring(arg2, &value, false)) return STATUS_ERROR; if(argget(*argv, arg3, 2, true)) { - if(!valfromstring(arg3, &size, 0, 0, false, 0)) + if(!valfromstring(arg3, &size, false)) return STATUS_ERROR; } else @@ -1473,7 +1473,7 @@ CMDRESULT cbBenchmark(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, false, 0)) + if(!valfromstring(arg1, &addr, false)) return STATUS_ERROR; uint ticks=GetTickCount(); for(int i=0; i<10000; i++) @@ -1503,7 +1503,7 @@ CMDRESULT cbMemWrite(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, false, 0)) + if(!valfromstring(arg1, &addr, false)) return STATUS_ERROR; unsigned char* blub=(unsigned char*)emalloc(0x2123, "cbMemWrite:blub"); memread(fdProcessInfo->hProcess, (const void*)addr, blub, 0x2123, 0); @@ -1624,7 +1624,7 @@ CMDRESULT cbDebugAttach(int argc, char* argv[]) return STATUS_ERROR; } uint pid=0; - if(!valfromstring(argv[1], &pid, 0, 0, true, 0)) + if(!valfromstring(argv[1], &pid)) { dprintf("invalid expression \"%s\"!\n", argv[1]); return STATUS_ERROR; @@ -1687,7 +1687,7 @@ CMDRESULT cbDebugDump(int argc, char* argv[]) return STATUS_ERROR; } duint addr=0; - if(!valfromstring(argv[1], &addr, 0, 0, true, 0)) + if(!valfromstring(argv[1], &addr)) { dprintf("invalid address \"%s\"!\n", argv[1]); return STATUS_ERROR; diff --git a/x64_dbg_dbg/disasm_helper.cpp b/x64_dbg_dbg/disasm_helper.cpp index 2cb8a8ce..bb8f5a10 100644 --- a/x64_dbg_dbg/disasm_helper.cpp +++ b/x64_dbg_dbg/disasm_helper.cpp @@ -68,7 +68,8 @@ static bool HandleArgument(ARGTYPE* Argument, INSTRTYPE* Instruction, DISASM_ARG value=Instruction->AddrValue; arg->constant=value; arg->value=0; - valfromstring(argmnemonic, &value, 0, 0, true, 0); + if(!valfromstring(argmnemonic, &value, true, true)) + return false; if(DbgMemIsValidReadPtr(value)) { arg->value=value; @@ -94,11 +95,8 @@ static bool HandleArgument(ARGTYPE* Argument, INSTRTYPE* Instruction, DISASM_ARG arg->segment=SEG_DEFAULT; arg->type=arg_normal; uint value=0; - if(!valfromstring(argmnemonic, &value, 0, 0, true, 0)) - { - dprintf("HandleArgument:valfromstring failed!->%p\n", addr); + if(!valfromstring(argmnemonic, &value, true, true)) return false; - } arg->value=value; char sValue[64]=""; sprintf(sValue, "%"fext"X", value); diff --git a/x64_dbg_dbg/instruction.cpp b/x64_dbg_dbg/instruction.cpp index 450a22f4..05fadcad 100644 --- a/x64_dbg_dbg/instruction.cpp +++ b/x64_dbg_dbg/instruction.cpp @@ -16,7 +16,7 @@ CMDRESULT cbBadCmd(int argc, char* argv[]) int valsize=0; bool isvar=false; bool hexonly=false; - if(valfromstring(*argv, &value, &valsize, &isvar, false, &hexonly)) //dump variable/value/register/etc + if(valfromstring(*argv, &value, false, false, &valsize, &isvar, &hexonly)) //dump variable/value/register/etc { //dprintf("[DEBUG] valsize: %d\n", valsize); if(valsize) @@ -77,12 +77,12 @@ CMDRESULT cbInstrVar(int argc, char* argv[]) int add=0; if(*arg1=='$') add++; - if(valfromstring(arg1+add, &value, 0, 0, true, 0)) + if(valfromstring(arg1+add, &value)) { dprintf("invalid variable name \"%s\"\n", arg1); return STATUS_ERROR; } - if(!valfromstring(arg2, &value, 0, 0, false, 0)) + if(!valfromstring(arg2, &value)) { dprintf("invalid value \"%s\"\n", arg2); return STATUS_ERROR; @@ -123,18 +123,16 @@ CMDRESULT cbInstrMov(int argc, char* argv[]) if(!argget(*argv, arg2, 1, false)) //src name return STATUS_ERROR; uint set_value=0; - if(!valfromstring(arg2, &set_value, 0, 0, false, 0)) + if(!valfromstring(arg2, &set_value)) { dprintf("invalid src \"%s\"\n", arg2); return STATUS_ERROR; } bool isvar=false; - uint temp; - valfromstring(arg1, &temp, 0, &isvar, true, 0); - if(!isvar or !valtostring(arg1, &set_value, false)) + if(!isvar or !valtostring(arg1, &set_value, true)) { uint value; - if(valfromstring(arg1, &value, 0, 0, true, 0)) + if(valfromstring(arg1, &value)) { dprintf("invalid dest \"%s\"\n", arg1); return STATUS_ERROR; @@ -221,7 +219,7 @@ CMDRESULT cbInstrCmt(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) { dprintf("invalid address: \"%s\"\n", arg1); return STATUS_ERROR; @@ -243,7 +241,7 @@ CMDRESULT cbInstrCmtdel(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) { dprintf("invalid address: \"%s\"\n", arg1); return STATUS_ERROR; @@ -262,7 +260,7 @@ CMDRESULT cbInstrLbl(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) { dprintf("invalid address: \"%s\"\n", arg1); return STATUS_ERROR; @@ -284,7 +282,7 @@ CMDRESULT cbInstrLbldel(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) { dprintf("invalid address: \"%s\"\n", arg1); return STATUS_ERROR; @@ -304,7 +302,7 @@ CMDRESULT cbInstrBookmarkSet(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) { dprintf("invalid address: \"%s\"\n", arg1); return STATUS_ERROR; @@ -324,7 +322,7 @@ CMDRESULT cbInstrBookmarkDel(int argc, char* argv[]) if(!argget(*argv, arg1, 0, false)) return STATUS_ERROR; uint addr=0; - if(!valfromstring(arg1, &addr, 0, 0, true, 0)) + if(!valfromstring(arg1, &addr)) { dprintf("invalid address: \"%s\"\n", arg1); return STATUS_ERROR; @@ -367,7 +365,7 @@ CMDRESULT cbAssemble(int argc, char* argv[]) return STATUS_ERROR; } uint addr=0; - if(!valfromstring(argv[1], &addr, 0, 0, true, 0)) + if(!valfromstring(argv[1], &addr)) { dprintf("invalid expression: \"%s\"!\n", argv[1]); return STATUS_ERROR; @@ -428,7 +426,7 @@ CMDRESULT cbFunctionAdd(int argc, char* argv[]) } uint start=0; uint end=0; - if(!valfromstring(argv[1], &start, 0, 0, false, 0) or !valfromstring(argv[2], &end, 0, 0, false, 0)) + if(!valfromstring(argv[1], &start, false) or !valfromstring(argv[2], &end, false)) return STATUS_ERROR; if(!functionadd(start, end, true)) { @@ -447,7 +445,7 @@ CMDRESULT cbFunctionDel(int argc, char* argv[]) return STATUS_ERROR; } uint addr=0; - if(!valfromstring(argv[1], &addr, 0, 0, false, 0)) + if(!valfromstring(argv[1], &addr, false)) return STATUS_ERROR; if(!functiondel(addr)) { @@ -466,10 +464,10 @@ CMDRESULT cbInstrCmp(int argc, char* argv[]) return STATUS_ERROR; } uint arg1=0; - if(!valfromstring(argv[1], &arg1, 0, 0, false, 0)) + if(!valfromstring(argv[1], &arg1, false)) return STATUS_ERROR; uint arg2=0; - if(!valfromstring(argv[2], &arg2, 0, 0, false, 0)) + if(!valfromstring(argv[2], &arg2, false)) return STATUS_ERROR; uint ezflag; uint bsflag; @@ -510,7 +508,7 @@ CMDRESULT cbInstrGpa(int argc, char* argv[]) else sprintf(newcmd, "%s", argv[1]); uint result=0; - if(!valfromstring(newcmd, &result, 0, 0, false, 0)) + if(!valfromstring(newcmd, &result, false)) return STATUS_ERROR; varset("$RESULT", result, false); return STATUS_CONTINUE; @@ -709,10 +707,10 @@ CMDRESULT cbInstrTest(int argc, char* argv[]) return STATUS_ERROR; } uint arg1=0; - if(!valfromstring(argv[1], &arg1, 0, 0, false, 0)) + if(!valfromstring(argv[1], &arg1, false)) return STATUS_ERROR; uint arg2=0; - if(!valfromstring(argv[2], &arg2, 0, 0, false, 0)) + if(!valfromstring(argv[2], &arg2, false)) return STATUS_ERROR; uint ezflag; uint bsflag=0; diff --git a/x64_dbg_dbg/math.cpp b/x64_dbg_dbg/math.cpp index a401141b..94172829 100644 --- a/x64_dbg_dbg/math.cpp +++ b/x64_dbg_dbg/math.cpp @@ -295,7 +295,7 @@ static void adjustpairs(EXPRESSION* exps, int cur_open, int cur_close, int cur_l } } -static bool printlayer(char* exp, EXPRESSION* exps, int layer, bool silent) +static bool printlayer(char* exp, EXPRESSION* exps, int layer, bool silent, bool baseonly) { for(int i=0; itotal_pairs; i++) { @@ -312,7 +312,7 @@ static bool printlayer(char* exp, EXPRESSION* exps, int layer, bool silent) strcpy(backup, exp+open+len+1); uint value; - if(!mathfromstring(temp, &value, 0, 0, silent)) + if(!mathfromstring(temp, &value, silent, baseonly, 0, 0)) return false; adjustpairs(exps, open, close, len+1, sprintf(exp+open, "%X", value)); @@ -325,7 +325,7 @@ static bool printlayer(char* exp, EXPRESSION* exps, int layer, bool silent) return true; } -bool mathhandlebrackets(char* expression, bool silent) +bool mathhandlebrackets(char* expression, bool silent, bool baseonly) { EXPRESSION expstruct; expstruct.expression=expression; @@ -345,7 +345,7 @@ bool mathhandlebrackets(char* expression, bool silent) deepest=expstruct.pairs[i].layer; for(int i=deepest; i>0; i--) - if(!printlayer(expression, &expstruct, i, silent)) + if(!printlayer(expression, &expstruct, i, silent, baseonly)) { efree(expstruct.pairs, "mathhandlebrackets:expstruct.pairs"); return false; @@ -358,7 +358,7 @@ bool mathhandlebrackets(char* expression, bool silent) /* - handle math */ -bool mathfromstring(const char* string, uint* value, int* value_size, bool* isvar, bool silent) +bool mathfromstring(const char* string, uint* value, bool silent, bool baseonly, int* value_size, bool* isvar) { int highestop=0; int highestop_pos=0; @@ -373,11 +373,7 @@ bool mathfromstring(const char* string, uint* value, int* value_size, bool* isva } } if(!highestop) - { - if(!valfromstring(string, value, value_size, isvar, silent, 0)) - return false; - return true; - } + return valfromstring(string, value, silent, baseonly, value_size, isvar, 0); char* strleft=(char*)emalloc(len+1, "mathfromstring:strleft"); char* strright=(char*)emalloc(len+1, "mathfromstring:strright"); memset(strleft, 0, len+1); @@ -392,7 +388,7 @@ bool mathfromstring(const char* string, uint* value, int* value_size, bool* isva return false; } uint right=0; - if(!valfromstring(strright, &right, 0, 0, silent, 0)) + if(!valfromstring(strright, &right, silent, baseonly)) { efree(strleft, "mathfromstring:strleft"); efree(strright, "mathfromstring:strright"); @@ -410,7 +406,7 @@ bool mathfromstring(const char* string, uint* value, int* value_size, bool* isva } } uint left=0; - if(!valfromstring(strleft, &left, 0, 0, silent, 0)) + if(!valfromstring(strleft, &left, silent, baseonly)) { efree(strleft, "mathfromstring:strleft"); efree(strright, "mathfromstring:strright"); diff --git a/x64_dbg_dbg/math.h b/x64_dbg_dbg/math.h index 8ca255c1..97fa745c 100644 --- a/x64_dbg_dbg/math.h +++ b/x64_dbg_dbg/math.h @@ -6,8 +6,8 @@ int mathisoperator(char ch); void mathformat(char* text); bool mathcontains(const char* text); -bool mathhandlebrackets(char* expression, bool silent); -bool mathfromstring(const char* string, uint* value, int* value_size, bool* isvar, bool silent); +bool mathhandlebrackets(char* expression, bool silent, bool baseonly); +bool mathfromstring(const char* string, uint* value, bool silent, bool baseonly, int* value_size, bool* isvar); bool mathdounsignedoperation(char op, uint left, uint right, uint* result); bool mathdosignedoperation(char op, sint left, sint right, sint* result); diff --git a/x64_dbg_dbg/value.cpp b/x64_dbg_dbg/value.cpp index 55d078c8..352441af 100644 --- a/x64_dbg_dbg/value.cpp +++ b/x64_dbg_dbg/value.cpp @@ -1119,7 +1119,7 @@ static bool ishexnumber(const char* string) return true; } -bool valfromstring(const char* string, uint* value, int* value_size, bool* isvar, bool silent, bool* hexonly) +bool valfromstring(const char* string, uint* value, bool silent, bool baseonly, int* value_size, bool* isvar, bool* hexonly) { if(!value) return false; @@ -1175,12 +1175,12 @@ bool valfromstring(const char* string, uint* value, int* value_size, bool* isvar int add=0; while(mathisoperator(string_[add])>2) add++; - if(!mathhandlebrackets(string_+add, silent)) + if(!mathhandlebrackets(string_+add, silent, baseonly)) { efree(string_, "valfromstring:string_"); return false; } - bool ret=mathfromstring(string_+add, value, value_size, isvar, silent); + bool ret=mathfromstring(string_+add, value, silent, baseonly, value_size, isvar); efree(string_, "valfromstring:string_"); return ret; } @@ -1227,7 +1227,7 @@ bool valfromstring(const char* string, uint* value, int* value_size, bool* isvar if(new_size