aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2020-02-16 02:02:32 -0800
committeriximeow <me@iximeow.net>2020-02-16 02:02:32 -0800
commit78d0c21c475fce65c36e64a36c26c689bee0faae (patch)
treeb08d6b077e799e7e42902645bcd289aa22be5649
parentfb41b5261b49f67e67e87e3a7401d748781d6c29 (diff)
embarassingly had OperandSpec variants for modrm displacement == 0 backwards
-rw-r--r--src/long_mode/mod.rs8
-rw-r--r--test/test.rs1
2 files changed, 5 insertions, 4 deletions
diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs
index d74ebe4..954ae95 100644
--- a/src/long_mode/mod.rs
+++ b/src/long_mode/mod.rs
@@ -4457,16 +4457,16 @@ fn read_sib<T: Iterator<Item=u8>>(bytes_iter: &mut T, instr: &mut Instruction, m
if disp == 0 {
if modbits == 0 {
- OperandSpec::RegScaleDisp
+ OperandSpec::RegScale
} else {
- OperandSpec::RegIndexBaseScaleDisp
+ OperandSpec::RegIndexBaseScale
}
} else {
instr.disp = disp as i64 as u64;
if modbits == 0 {
- OperandSpec::RegScale
+ OperandSpec::RegScaleDisp
} else {
- OperandSpec::RegIndexBaseScale
+ OperandSpec::RegIndexBaseScaleDisp
}
}
}
diff --git a/test/test.rs b/test/test.rs
index 896ffaa..1bac590 100644
--- a/test/test.rs
+++ b/test/test.rs
@@ -476,6 +476,7 @@ fn test_control_flow() {
test_display(&[0x0f, 0x86, 0x8b, 0x01, 0x00, 0x00], "jna 0x18b");
test_display(&[0x74, 0x47], "jz 0x47");
test_display(&[0xff, 0x15, 0x7e, 0x72, 0x24, 0x00], "call [rip + 0x24727e]");
+ test_display(&[0xff, 0x24, 0xcd, 0x70, 0xa0, 0xbc, 0x01], "jmp [rcx * 8 + 0x1bca070]");
test_display(&[0xc3], "ret");
}