Bug 870218 - Add support for hooking NtWriteFile on Win64; r=ehsan

This commit is contained in:
Makoto Kato 2013-06-12 15:22:55 -04:00
parent 8a2bc5ab87
commit 278f3ab531

View File

@ -402,8 +402,24 @@ protected:
continue;
}
if (origBytes[nBytes] == 0x41) {
if (origBytes[nBytes] == 0x0f) {
nBytes++;
if (origBytes[nBytes] == 0x1f) {
// nop (multibyte)
nBytes++;
if ((origBytes[nBytes] & 0xc0) == 0x40 &&
(origBytes[nBytes] & 0x7) == 0x04) {
nBytes += 3;
} else {
return;
}
} else if (origBytes[nBytes] == 0x05) {
// syscall
nBytes++;
} else {
return;
}
} else if (origBytes[nBytes] == 0x41) {
// REX.B
nBytes++;
@ -460,6 +476,13 @@ protected:
// complex MOV
return;
}
} else if (origBytes[nBytes] == 0xc7) {
// MOV r/m64, imm32
if (origBytes[nBytes + 1] & 0xf8 == 0x40) {
nBytes += 6;
} else {
return;
}
} else {
// not support yet!
return;
@ -470,6 +493,12 @@ protected:
} else if (origBytes[nBytes] == 0x90) {
// nop
nBytes++;
} else if (origBytes[nBytes] == 0xb8) {
// MOV 0xB8: http://ref.x86asm.net/coder32.html#xB8
nBytes += 5;
} else if (origBytes[nBytes] == 0xc3) {
// ret
nBytes++;
} else if (origBytes[nBytes] == 0xe9) {
pJmp32 = nBytes;
// jmp 32bit offset