mirror of https://github.com/x64dbg/zydis
Further improvements on #13
This commit is contained in:
parent
839729bfb2
commit
8dd599555f
|
@ -2386,16 +2386,6 @@ ZydisStatus ZydisDecoderDecodeInstructionEx(ZydisInstructionDecoder* decoder,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// For relative operands, apply instruction length offset.
|
|
||||||
for (size_t i = 0; i < info->operandCount; ++i)
|
|
||||||
{
|
|
||||||
if (info->operands[i].type == ZYDIS_OPERAND_TYPE_IMMEDIATE &&
|
|
||||||
info->operands[i].imm.isRelative)
|
|
||||||
{
|
|
||||||
info->operands[i].imm.value.sqword += info->length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Replace XCHG rAX, rAX with NOP alias
|
// Replace XCHG rAX, rAX with NOP alias
|
||||||
if (info->mnemonic == ZYDIS_MNEMONIC_XCHG)
|
if (info->mnemonic == ZYDIS_MNEMONIC_XCHG)
|
||||||
{
|
{
|
||||||
|
|
|
@ -56,14 +56,16 @@ ZydisStatus ZydisUtilsCalcAbsoluteTargetAddress(const ZydisInstructionInfo* info
|
||||||
}
|
}
|
||||||
if (operand->mem.base == ZYDIS_REGISTER_RIP)
|
if (operand->mem.base == ZYDIS_REGISTER_RIP)
|
||||||
{
|
{
|
||||||
*address = (uint64_t)(info->instrPointer + operand->mem.disp.value.sqword);
|
*address =
|
||||||
|
(uint64_t)(info->instrPointer + operand->mem.disp.value.sqword);
|
||||||
return ZYDIS_STATUS_SUCCESS;
|
return ZYDIS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZYDIS_OPERAND_TYPE_IMMEDIATE:
|
case ZYDIS_OPERAND_TYPE_IMMEDIATE:
|
||||||
if (operand->imm.isSigned && operand->imm.isRelative)
|
if (operand->imm.isSigned && operand->imm.isRelative)
|
||||||
{
|
{
|
||||||
*address = (uint64_t)((int64_t)info->instrPointer + operand->imm.value.sqword);
|
*address =
|
||||||
|
(uint64_t)((int64_t)info->instrPointer + info->length + operand->imm.value.sqword);
|
||||||
switch (info->mode)
|
switch (info->mode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
||||||
|
|
Loading…
Reference in New Issue