Skip to content

Commit

Permalink
Use signed values for calculations
Browse files Browse the repository at this point in the history
The manual says everything but the scale can be positive or negative.
  • Loading branch information
hainest committed Dec 27, 2023
1 parent 9da139e commit fea5fcb
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions instructionAPI/src/x86/decoder.C
Original file line number Diff line number Diff line change
Expand Up @@ -229,16 +229,16 @@ namespace Dyninst { namespace InstructionAPI {
}
if(operand.mem.index != X86_REG_INVALID) {
Expression::Ptr indexAST = makeRegisterExpression(x86::translate_register(operand.mem.index, this->mode));
indexAST = makeMultiplyExpression(indexAST, Immediate::makeImmediate(Result(u8, operand.mem.scale)), u64);
indexAST = makeMultiplyExpression(indexAST, Immediate::makeImmediate(Result(u8, operand.mem.scale)), s64);
if(effectiveAddr)
effectiveAddr = makeAddExpression(effectiveAddr, indexAST, u64);
effectiveAddr = makeAddExpression(effectiveAddr, indexAST, s64);
else
effectiveAddr = indexAST;
}
// Displacement for addressing memory. So it is unsigned
auto immAST = Immediate::makeImmediate(Result(u32, operand.mem.disp));

auto immAST = Immediate::makeImmediate(Result(s32, operand.mem.disp));
if(effectiveAddr)
effectiveAddr = makeAddExpression(effectiveAddr, immAST, u64);
effectiveAddr = makeAddExpression(effectiveAddr, immAST, s64);
else
effectiveAddr = immAST;
Result_Type type = size_to_type(operand.size);
Expand Down

0 comments on commit fea5fcb

Please sign in to comment.