Skip to content

Commit 5f900ff

Browse files
Charlie BartoCharlie Barto
authored andcommitted
correct instruction encodings
1 parent b5b73ce commit 5f900ff

File tree

1 file changed

+30
-33
lines changed

1 file changed

+30
-33
lines changed

compiler-rt/lib/interception/interception_win.cpp

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -535,13 +535,11 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
535535
case 0xE589: // 89 E5 : mov ebp, esp
536536
case 0xC18B: // 8B C1 : mov eax, ecx
537537
case 0xC033: // 33 C0 : xor eax, eax
538-
case 0x8bec: // EC 8B : mov ebp, esp
539538
case 0xC933: // 33 C9 : xor ecx, ecx
540539
case 0xD233: // 33 D2 : xor edx, edx
541-
case 0xc084: // 84 c0 : test al,al
542-
case 0xdb84: // 84 db : test bl,bl
543-
case 0xc984: // 84 c9 : test cl,cl
544-
case 0xd284: // 84 d2 : test dl,dl
540+
case 0xDB84: // 84 DB : test bl,bl
541+
case 0xC984: // 84 C9 : test cl,cl
542+
case 0xD284: // 84 D2 : test dl,dl
545543
return 2;
546544

547545
// Cannot overwrite control-instruction. Return 0 to indicate failure.
@@ -550,8 +548,8 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
550548
}
551549

552550
switch (0x00FFFFFF & *(u32*)address) {
553-
case 0x83e4f8: // F8 E4 83 : and esp, 0xFFFFFFF8
554-
case 0x83ec64: // 64 EC 83 : sub esp, 64h
551+
case 0xF8E484: // 83 E4 F8 : and esp, 0xFFFFFFF8
552+
case 0x64EC83: // 83 EC 64 : sub esp, 64h
555553
return 3;
556554
case 0x24A48D: // 8D A4 24 XX XX XX XX : lea esp, [esp + XX XX XX XX]
557555
return 7;
@@ -562,7 +560,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
562560
case 0xA1: // A1 XX XX XX XX XX XX XX XX :
563561
// movabs eax, dword ptr ds:[XXXXXXXX]
564562
return 9;
565-
case 0xf2:
563+
case 0xF2:
566564
switch (*(u32 *)(address + 1)) {
567565
case 0x2444110f: // f2 0f 11 44 24 XX movsd mmword ptr [rsp +
568566
// XX], xmm0
@@ -601,15 +599,15 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
601599
case 0x5641: // push r14
602600
case 0x5741: // push r15
603601
case 0x9066: // Two-byte NOP
604-
case 0xc084: // test al, al
605-
case 0x018a: // mov al, byte ptr [rcx]
602+
case 0xC084: // test al, al
603+
case 0x018A: // mov al, byte ptr [rcx]
606604
return 2;
607605

608-
case 0x7e80: // 80 7e YY XX cmp BYTE PTR [rsi+YY], XX
609-
case 0x7d80: // 80 7d YY XX cmp BYTE PTR [rdx+YY], XX
610-
case 0x7a80: // 80 7a YY XX cmp BYTE PTR [rdx+YY], XX
606+
case 0x7E80: // 80 7E YY XX cmp BYTE PTR [rsi+YY], XX
607+
case 0x7D80: // 80 7D YY XX cmp BYTE PTR [rdx+YY], XX
608+
case 0x7A80: // 80 7A YY XX cmp BYTE PTR [rdx+YY], XX
611609
case 0x7880: // 80 78 YY XX cmp BYTE PTR [rax+YY], XX
612-
case 0x7b80: // 80 7b YY XX cmp BYTE PTR [rbx+YY], XX
610+
case 0x7B80: // 80 7B YY XX cmp BYTE PTR [rbx+YY], XX
613611
case 0x7980: // 80 79 YY XX cmp BYTE ptr [rcx+YY], XX
614612
return 4;
615613

@@ -618,11 +616,11 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
618616
*rel_offset = 2;
619617
return 6;
620618

621-
case 0x7e81: // 81 7e YY XX XX XX XX cmp DWORD PTR [rsi+YY], XX XX XX XX
622-
case 0x7d81: // 81 7d YY XX XX XX XX cmp DWORD PTR [rdx+YY], XX XX XX XX
623-
case 0x7a81: // 81 7a YY XX XX XX XX cmp DWORD PTR [rdx+YY], XX XX XX XX
619+
case 0x7E81: // 81 7E YY XX XX XX XX cmp DWORD PTR [rsi+YY], XX XX XX XX
620+
case 0x7D81: // 81 7D YY XX XX XX XX cmp DWORD PTR [rdx+YY], XX XX XX XX
621+
case 0x7A81: // 81 7A YY XX XX XX XX cmp DWORD PTR [rdx+YY], XX XX XX XX
624622
case 0x7881: // 81 78 YY XX XX XX XX cmp DWORD PTR [rax+YY], XX XX XX XX
625-
case 0x7b81: // 81 78 YY XX XX XX XX cmp DWORD PTR [rbx+YY], XX XX XX XX
623+
case 0x7B81: // 81 78 YY XX XX XX XX cmp DWORD PTR [rbx+YY], XX XX XX XX
626624
case 0x7981: // 81 79 YY XX XX XX XX cmp dword ptr [rcx+YY], XX XX XX XX
627625
return 7;
628626
}
@@ -692,27 +690,26 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
692690
case 0xf88349: // 49 83 f8 XX : cmp r8, XX
693691
return 4;
694692

695-
case 0x246483: // 83 64 24 00 00 : and DWORD PTR [rsp+xx],0x0
693+
case 0x246483: // 83 64 24 XX YY : and DWORD PTR [rsp+XX], YY
696694
return 5;
697695

698-
case 0x788166: // 66 81 78 YY XX XX cmp WORD PTR [rax+0xYY], XX XX
699-
case 0x798166: // 66 81 79 YY XX XX cmp WORD PTR [rcx+0xYY], XX XX
700-
case 0x7a8166: // 66 81 7a YY XX XX cmp WORD PTR [rdx+0xYY], XX XX
701-
case 0x7b8166: // 66 81 7b YY XX XX cmp WORD PTR [rbx+0xYY], XX XX
702-
case 0x7e8166: // 66 81 7e YY XX XX cmp WORD PTR [rsi+0xYY], XX XX
703-
case 0x7f8166: // 66 81 7f YY XX XX cmp WORD PTR [rdi+0xYY], XX XX
696+
case 0x788166: // 66 81 78 XX YY YY cmp WORD PTR [rax+XX], YY YY
697+
case 0x798166: // 66 81 79 XX YY YY cmp WORD PTR [rcx+XX], YY YY
698+
case 0x7a8166: // 66 81 7a XX YY YY cmp WORD PTR [rdx+XX], YY YY
699+
case 0x7b8166: // 66 81 7b XX YY YY cmp WORD PTR [rbx+XX], YY YY
700+
case 0x7e8166: // 66 81 7e XX YY YY cmp WORD PTR [rsi+XX], YY YY
701+
case 0x7f8166: // 66 81 7f XX YY YY cmp WORD PTR [rdi+XX], YY YY
704702
return 6;
705703

706704
case 0xec8148: // 48 81 EC XX XX XX XX : sub rsp, XXXXXXXX
707705
return 7;
708-
case 0x788141: // 41 81 78 YY XX XX XX XX cmp DWORD PTR [r8+YY], XX XX XX
709-
// XX
710-
case 0x798141: // r9
711-
case 0x7a8141: // r10
712-
case 0x7b8141: // r11
713-
case 0x7c8141: // r12
714-
case 0x7d8141: // r13
715-
case 0x7e8141: // r14
706+
case 0x788141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r8+YY], XX XX XX XX
707+
case 0x798141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r9+YY], XX XX XX XX
708+
case 0x7a8141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r10+YY], XX XX XX XX
709+
case 0x7b8141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r11+YY], XX XX XX XX
710+
case 0x7c8141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r12+YY], XX XX XX XX
711+
case 0x7d8141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r13+YY], XX XX XX XX
712+
case 0x7e8141: // 41 81 78 XX YY YY YY YY : cmp DWORD PTR [r14+YY], XX XX XX XX
716713
case 0x7f8141: // 41 81 78 YY XX XX XX XX cmp DWORD P [r15+YY], XX XX XX XX
717714
case 0x247c81: // 81 7c 24 YY XX XX XX XX cmp DWORD P [rsp+YY], XX XX XX XX
718715
return 8;

0 commit comments

Comments
 (0)