* defined 'bswap' command as cbInstrBswap. seems to work when the dest var is a register or user-defined var. address args fail. * rewrote bswap to use StringUtils::sprintf formatting. * removed debug prints from byteswap func. added error message when parsed arg isn't a variable. * formatted.
This commit is contained in:
parent
a3cc839d42
commit
c32eefa4dd
|
|
@ -858,6 +858,36 @@ CMDRESULT cbInstrPop(int argc, char* argv[])
|
|||
return STATUS_CONTINUE;
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrBswap(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
{
|
||||
dputs("not enough arguments!");
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
duint arg1 = 0;
|
||||
int size = 0;
|
||||
bool isvar = false;
|
||||
if(!valfromstring(argv[1], &arg1, false, false, &size, &isvar))
|
||||
return STATUS_ERROR;
|
||||
if(!isvar)
|
||||
{
|
||||
dprintf("Invalid expression: \"%s\"", argv[1]);
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
duint result = arg1;
|
||||
if(size == 2)
|
||||
result = _byteswap_ushort((uint16)arg1);
|
||||
else if(size == 4)
|
||||
result = _byteswap_ulong((uint32)arg1);
|
||||
#ifdef _WIN64
|
||||
else if(size == 8)
|
||||
result = _byteswap_uint64(arg1);
|
||||
#endif
|
||||
String swapcmd = StringUtils::sprintf("mov %s, " fhex, argv[1], result);
|
||||
return cmddirectexec(swapcmd.c_str());
|
||||
}
|
||||
|
||||
CMDRESULT cbInstrRefinit(int argc, char* argv[])
|
||||
{
|
||||
GuiReferenceInitialize("Script");
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ CMDRESULT cbInstrTest(int argc, char* argv[]);
|
|||
CMDRESULT cbInstrXor(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrPush(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrPop(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrBswap(int argc, char* argv[]);
|
||||
|
||||
CMDRESULT cbInstrRefinit(int argc, char* argv[]);
|
||||
CMDRESULT cbInstrRefadd(int argc, char* argv[]);
|
||||
|
|
|
|||
|
|
@ -261,6 +261,7 @@ static void registercommands()
|
|||
dbgcmdnew("xor", cbInstrXor, false);
|
||||
dbgcmdnew("push", cbInstrPush, true);
|
||||
dbgcmdnew("pop", cbInstrPop, true);
|
||||
dbgcmdnew("bswap", cbInstrBswap, true);
|
||||
|
||||
//script
|
||||
dbgcmdnew("scriptload", cbScriptLoad, false);
|
||||
|
|
|
|||
Loading…
Reference in New Issue