fix: mov sreg, reg triggers pf before ud
This commit is contained in:
parent
651d0d83f9
commit
14b72530d4
1 changed files with 12 additions and 7 deletions
|
|
@ -919,23 +919,28 @@ pub unsafe fn instr32_8D_mem(modrm_byte: i32, r: i32) {
|
|||
*prefixes = 0;
|
||||
}
|
||||
|
||||
unsafe fn instr_8E_helper(data: i32, r: i32) {
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_8E_mem(addr: i32, r: i32) {
|
||||
if r == ES || r == SS || r == DS || r == FS || r == GS {
|
||||
if !switch_seg(r, data) {
|
||||
if !switch_seg(r, return_on_pagefault!(safe_read16(addr))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
dbg_log!("mov sreg #ud");
|
||||
trigger_ud();
|
||||
};
|
||||
}
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_8E_mem(addr: i32, r: i32) {
|
||||
instr_8E_helper(return_on_pagefault!(safe_read16(addr)), r);
|
||||
pub unsafe fn instr_8E_reg(r1: i32, r: i32) {
|
||||
if r == ES || r == SS || r == DS || r == FS || r == GS {
|
||||
switch_seg(r, read_reg16(r1));
|
||||
}
|
||||
else {
|
||||
dbg_log!("mov sreg #ud");
|
||||
trigger_ud();
|
||||
}
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn instr_8E_reg(r1: i32, r: i32) { instr_8E_helper(read_reg16(r1), r); }
|
||||
|
||||
pub unsafe fn instr16_8F_0_mem(modrm_byte: i32) {
|
||||
// pop
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue