bsf calculating wrong value
Closed this issue · 2 comments
brandonros commented
{
"i": 83,
"x64dbgLine": {
"rawLine": {
"Index": "00053",
"Address": "0000000144FF961A",
"Bytes": "66:0FBCC4",
"Disassembly": "bsf ax,sp",
"Registers": "rax: B5CF-> 4",
"Memory": "",
"Comments": ""
},
"rip": "144ff961a",
"registerChanges": [
{
"registerName": "rax",
"previousValue": "b5cf",
"newValue": "4"
}
],
"memoryChanges": []
},
"scemuLine": {
"rawLine": "diff_reg: rip = 144ff961a rax b5cf -> 3;",
"rip": "144ff961a",
"registerChanges": [
{
"registerName": "rax",
"previousValue": "b5cf",
"newValue": "3"
}
],
"memoryChanges": []
},
"instructionErrors": [
{
"index": 0,
"message": "newValue mismatch",
"x64dbg": "4",
"scemu": "3"
}
]
},
84 0x144ff961a: bsf ax,sp
bsf: src = f290 sz = 16 dest = 3 bitpos = 4
diff_flags: rip = 144ff961a f_zf 1 -> 0;
diff_reg: rip = 144ff961a rax b5cf -> 3;
rax: 0x3 rbx: 0x0 rcx: 0x140000000 rdx: 0x100000000 rsi: 0x14f410 rdi: 0x144e4725a rbp: 0x144ff960c rsp: 0x14f290
sha0coder commented
ok 4 instead 3,
while bitpos < sz && get_bit!(src, bitpos) == 0 {
dest += 1;
bitpos += 1;
}
if dest > 0 {
dest -= 1; // CASUALLY THIS
}
if dest == sz as u64 {
self.flags.f_cf = true;
} else {
self.flags.f_cf = false;
}
if dest == 0 {
self.flags.f_zf = true;
} else {
self.flags.f_zf = false;
}
sha0coder commented
fixed.