aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2021-07-03 09:42:25 -0700
committeriximeow <me@iximeow.net>2021-07-03 09:43:13 -0700
commitd548b9d8b7d2163d524c2a25ff0cb7e794e4e11d (patch)
tree77bc53ca1b645b09329f848f9be99e806dbb4ae1
parent77efbb834a5119b93e656dce6189f36df89645bb (diff)
support pconfig/tme
-rw-r--r--src/long_mode/display.rs2
-rw-r--r--src/long_mode/mod.rs4
-rw-r--r--src/protected_mode/display.rs2
-rw-r--r--src/protected_mode/mod.rs1
-rw-r--r--test/long_mode/mod.rs2
5 files changed, 10 insertions, 1 deletions
diff --git a/src/long_mode/display.rs b/src/long_mode/display.rs
index 049b96d..5f74a3e 100644
--- a/src/long_mode/display.rs
+++ b/src/long_mode/display.rs
@@ -598,6 +598,7 @@ const MNEMONICS: &[&'static str] = &[
"vmlaunch",
"vmresume",
"vmxoff",
+ "pconfig",
"monitor",
"mwait",
"monitorx",
@@ -3131,6 +3132,7 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::VMSAVE |
Opcode::VMRUN |
Opcode::VMXOFF |
+ Opcode::PCONFIG |
Opcode::MONITOR |
Opcode::MWAIT |
Opcode::MONITORX |
diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs
index 41e24e6..125716f 100644
--- a/src/long_mode/mod.rs
+++ b/src/long_mode/mod.rs
@@ -1295,6 +1295,7 @@ pub enum Opcode {
VMLAUNCH,
VMRESUME,
VMXOFF,
+ PCONFIG,
MONITOR,
MWAIT,
MONITORX,
@@ -9157,6 +9158,9 @@ fn unlikely_operands<T: Reader<<Arch as yaxpeax_arch::Arch>::Address, <Arch as y
0b100 => {
instruction.opcode = Opcode::VMXOFF;
},
+ 0b101 => {
+ instruction.opcode = Opcode::PCONFIG;
+ },
_ => {
return Err(DecodeError::InvalidOpcode);
}
diff --git a/src/protected_mode/display.rs b/src/protected_mode/display.rs
index 0736fc1..4f784d6 100644
--- a/src/protected_mode/display.rs
+++ b/src/protected_mode/display.rs
@@ -589,6 +589,7 @@ const MNEMONICS: &[&'static str] = &[
"vmlaunch",
"vmresume",
"vmxoff",
+ "pconfig",
"monitor",
"mwait",
"monitorx",
@@ -3142,6 +3143,7 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::VMSAVE |
Opcode::VMRUN |
Opcode::VMXOFF |
+ Opcode::PCONFIG |
Opcode::MONITOR |
Opcode::MWAIT |
Opcode::MONITORX |
diff --git a/src/protected_mode/mod.rs b/src/protected_mode/mod.rs
index a1aac3f..46321d1 100644
--- a/src/protected_mode/mod.rs
+++ b/src/protected_mode/mod.rs
@@ -1213,6 +1213,7 @@ pub enum Opcode {
VMLAUNCH,
VMRESUME,
VMXOFF,
+ PCONFIG,
MONITOR,
MWAIT,
MONITORX,
diff --git a/test/long_mode/mod.rs b/test/long_mode/mod.rs
index 1eedfec..98fc8b6 100644
--- a/test/long_mode/mod.rs
+++ b/test/long_mode/mod.rs
@@ -865,7 +865,7 @@ fn test_0f01() {
test_display(&[0x0f, 0x01, 0xc2], "vmlaunch");
test_display(&[0x0f, 0x01, 0xc3], "vmresume");
test_display(&[0x0f, 0x01, 0xc4], "vmxoff");
- test_invalid(&[0x0f, 0x01, 0xc5]); // TODO: TME would make this `pconfig`
+ test_display(&[0x0f, 0x01, 0xc5], "pconfig");
test_invalid(&[0x0f, 0x01, 0xc6]);
test_invalid(&[0x0f, 0x01, 0xc7]);
test_display(&[0x0f, 0x01, 0xc8], "monitor");