From fcfe3c1f4b4d920218c8424d0864659cd68be82b Mon Sep 17 00:00:00 2001 From: Lab 313 Date: Fri, 22 Apr 2016 02:35:40 +0300 Subject: [PATCH 1/2] Update scanner.cpp Fixed negative address calculating. --- src/scanner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scanner.cpp b/src/scanner.cpp index 0b30c97..4ce2750 100644 --- a/src/scanner.cpp +++ b/src/scanner.cpp @@ -330,7 +330,7 @@ static void decodeBranchTgt(x86_insn_t &insn) int32_t addr = tgt_op->getAddress(); if(tgt_op->is_relative()) { - addr += insn.addr+insn.size; + addr = (uint16_t)(addr + insn.addr + insn.size); } pIcode->ll()->replaceSrc((uint32_t)addr); pIcode->ll()->setFlags(I); From 19191876e28fea791ae153a9457dc461813b542f Mon Sep 17 00:00:00 2001 From: Lab 313 Date: Fri, 22 Apr 2016 02:37:22 +0300 Subject: [PATCH 2/2] Update libdis.h Fixed negative address getting. --- 3rd_party/libdisasm/libdis.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/3rd_party/libdisasm/libdis.h b/3rd_party/libdisasm/libdis.h index 6d3fc98..2d5ad3f 100644 --- a/3rd_party/libdisasm/libdis.h +++ b/3rd_party/libdisasm/libdis.h @@ -317,7 +317,10 @@ struct x86_op_t{ case op_offset: return data.offset; case op_relative_far: - return (int32_t) data.relative_far; + if (data.relative_far & 0x8000) + return (data.relative_far & 0xFFFF) | 0xFFFF0000; + else + return (int32_t)data.relative_far; default: assert(false); break;