Skip to content

Commit 3297340

Browse files
authored
[win/asan] GetInstructionSize: Support 48 bX movabsq instructions. (#141625)
Created for Wine's memset by clang or mingw-gcc, the latter places it quite at the start of the function: ``` 0x00006ffffb67e210 <memset+0>: 0f b6 d2 movzbl %dl,%edx 0x00006ffffb67e213 <memset+3>: 48 b8 01 01 01 01 01 01 01 01 movabs $0x101010101010101,%rax ``` `3200 uint64_t v = 0x101010101010101ull * (unsigned char)c;` https://gitlab.winehq.org/wine/wine/-/blob/290fd532ee7376442d272e3833528256bfe5e9dc/dlls/msvcrt/string.c#L3200
1 parent e49738b commit 3297340

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

compiler-rt/lib/interception/interception_win.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,12 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
754754
case 0x7B81: // 81 7B YY XX XX XX XX cmp DWORD PTR [rbx+YY], XX XX XX XX
755755
case 0x7981: // 81 79 YY XX XX XX XX cmp dword ptr [rcx+YY], XX XX XX XX
756756
return 7;
757+
758+
case 0xb848: // 48 b8 XX XX XX XX XX XX XX XX :
759+
// movabsq XX XX XX XX XX XX XX XX, rax
760+
case 0xba48: // 48 ba XX XX XX XX XX XX XX XX :
761+
// movabsq XX XX XX XX XX XX XX XX, rdx
762+
return 10;
757763
}
758764

759765
switch (0x00FFFFFF & *(u32 *)address) {

compiler-rt/lib/interception/tests/interception_win_test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,6 +1043,8 @@ const struct InstructionSizeData {
10431043
{ 8, {0xc7, 0x44, 0x24, 0x73, 0x74, 0x75, 0x76, 0x77}, 0, "C7 44 24 XX YY YY YY YY : mov dword ptr [rsp + XX], YYYYYYYY"},
10441044
{ 9, {0x41, 0x81, 0x7c, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78}, 0, "41 81 7c ZZ YY XX XX XX XX : cmp DWORD PTR [reg+reg*n+YY], XX XX XX XX"},
10451045
{ 9, {0xA1, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78}, 0, "A1 XX XX XX XX XX XX XX XX : movabs eax, dword ptr ds:[XXXXXXXX]"},
1046+
{10, {0x48, 0xb8, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79}, 0, "48 b8 XX XX XX XX XX XX XX XX : movabsq XX XX XX XX XX XX XX XX, rax"},
1047+
{10, {0x48, 0xba, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79}, 0, "48 ba XX XX XX XX XX XX XX XX : movabsq XX XX XX XX XX XX XX XX, rdx"},
10461048
#else
10471049
// sorted list
10481050
{ 3, {0x8B, 0x45, 0x72}, 0, "8B 45 XX : mov eax, dword ptr [ebp + XX]"},

0 commit comments

Comments
 (0)