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)
This commit is contained in:
parent
f0fc3ea4f9
commit
a3ec27853c
Binary file not shown.
Binary file not shown.
30
x64_dbg.sln
30
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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; i<exps->total_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");
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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<read_size)
|
||||
read_size=new_size;
|
||||
}
|
||||
if(!valfromstring(newstring+add, value, 0, 0, silent, 0))
|
||||
if(!valfromstring(newstring+add, value, silent, baseonly))
|
||||
{
|
||||
efree(newstring, "valfromstring::newstring");
|
||||
return false;
|
||||
|
@ -1312,6 +1312,8 @@ bool valfromstring(const char* string, uint* value, int* value_size, bool* isvar
|
|||
sscanf(string+inc, "%"fext"x", value);
|
||||
return true;
|
||||
}
|
||||
if(baseonly)
|
||||
return false;
|
||||
else if(valapifromstring(string, value, value_size, true, silent, hexonly)) //then come APIs
|
||||
return true;
|
||||
else if(labelfromstring(string, value)) //then come labels
|
||||
|
@ -1329,6 +1331,21 @@ bool valfromstring(const char* string, uint* value, int* value_size, bool* isvar
|
|||
return false; //nothing was OK
|
||||
}
|
||||
|
||||
bool valfromstring(const char* string, uint* value, bool silent, bool baseonly)
|
||||
{
|
||||
return valfromstring(string, value, silent, baseonly, 0, 0, 0);
|
||||
}
|
||||
|
||||
bool valfromstring(const char* string, uint* value, bool silent)
|
||||
{
|
||||
return valfromstring(string, value, silent, false);
|
||||
}
|
||||
|
||||
bool valfromstring(const char* string, uint* value)
|
||||
{
|
||||
return valfromstring(string, value, true);
|
||||
}
|
||||
|
||||
bool valtostring(const char* string, uint* value, bool silent)
|
||||
{
|
||||
if(!*string or !value)
|
||||
|
@ -1372,7 +1389,8 @@ bool valtostring(const char* string, uint* value, bool silent)
|
|||
read_size=new_size;
|
||||
}
|
||||
uint temp;
|
||||
if(!valfromstring(newstring+add, &temp, 0, 0, silent, 0))
|
||||
//TODO: check this
|
||||
if(!valfromstring(newstring+add, &temp, silent, true))
|
||||
{
|
||||
efree(newstring, "valfromstring::newstring");
|
||||
return false;
|
||||
|
|
|
@ -7,7 +7,10 @@
|
|||
bool valuesignedcalc();
|
||||
void valuesetsignedcalc(bool a);
|
||||
bool valapifromstring(const char* name, uint* value, int* value_size, bool printall, bool silent, bool* hexonly);
|
||||
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);
|
||||
bool valfromstring(const char* string, uint* value, bool silent, bool baseonly);
|
||||
bool valfromstring(const char* string, uint* value, bool silent);
|
||||
bool valfromstring(const char* string, uint* value);
|
||||
bool valflagfromstring(unsigned int eflags, const char* string);
|
||||
bool valtostring(const char* string, uint* value, bool silent);
|
||||
|
||||
|
|
Loading…
Reference in New Issue