DBG: updated disasm_fast
This commit is contained in:
parent
5f23a25f95
commit
f1a2270d31
|
@ -465,6 +465,7 @@ struct BASIC_INSTRUCTION_INFO
|
|||
MEMORY_INFO memory;
|
||||
ULONG_PTR addr; //addrvalue (jumps + calls)
|
||||
bool branch; //jumps/calls
|
||||
bool call; //instruction is a call
|
||||
};
|
||||
|
||||
struct SCRIPTBRANCH
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#include "disasm_fast.h"
|
||||
#include "debugger.h"
|
||||
#include "memory.h"
|
||||
|
||||
static MEMORY_SIZE argsize2memsize(int argsize)
|
||||
{
|
||||
|
@ -37,7 +39,13 @@ void fillbasicinfo(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo)
|
|||
}
|
||||
}
|
||||
else //branch
|
||||
{
|
||||
basicinfo->branch=true;
|
||||
if(disasm->Instruction.BranchType==CallType)
|
||||
basicinfo->call=true;
|
||||
if(disasm->Instruction.BranchType==RetType)
|
||||
basicinfo->branch=false;
|
||||
}
|
||||
//find memory displacement
|
||||
if((disasm->Argument1.ArgType&MEMORY_TYPE)==MEMORY_TYPE || (disasm->Argument2.ArgType&MEMORY_TYPE)==MEMORY_TYPE)
|
||||
{
|
||||
|
@ -81,3 +89,29 @@ void fillbasicinfo(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool disasmfast(unsigned char* data, uint addr, BASIC_INSTRUCTION_INFO* basicinfo)
|
||||
{
|
||||
if(!data or !basicinfo)
|
||||
return false;
|
||||
DISASM disasm;
|
||||
memset(&disasm, 0, sizeof(disasm));
|
||||
#ifdef _WIN64
|
||||
disasm.Archi=64;
|
||||
#endif // _WIN64
|
||||
disasm.EIP=(UIntPtr)data;
|
||||
disasm.VirtualAddr=(UInt64)addr;
|
||||
int len=Disasm(&disasm);
|
||||
if(len==UNKNOWN_OPCODE)
|
||||
return false;
|
||||
fillbasicinfo(&disasm, basicinfo);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool disasmfast(uint addr, BASIC_INSTRUCTION_INFO* basicinfo)
|
||||
{
|
||||
unsigned int data[16];
|
||||
if(!memread(fdProcessInfo->hProcess, (const void*)addr, data, sizeof(data), 0))
|
||||
return false;
|
||||
return disasmfast((unsigned char*)data, addr, basicinfo);
|
||||
}
|
|
@ -5,5 +5,7 @@
|
|||
#include "BeaEngine\BeaEngine.h"
|
||||
|
||||
void fillbasicinfo(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo);
|
||||
bool disasmfast(uint addr, BASIC_INSTRUCTION_INFO* basicinfo);
|
||||
bool disasmfast(unsigned char* data, uint addr, BASIC_INSTRUCTION_INFO* basicinfo);
|
||||
|
||||
#endif //_DISASM_FAST_H
|
||||
|
|
Loading…
Reference in New Issue