diff options
author | Etienne Bergeron <etienneb@google.com> | 2016-07-14 22:14:33 +0000 |
---|---|---|
committer | Etienne Bergeron <etienneb@google.com> | 2016-07-14 22:14:33 +0000 |
commit | 89b4df6a6fb65f44d6633ac4d169756a49fe466e (patch) | |
tree | e81b0f745038e91ea8c2746ed4ecb22b2af13ee5 | |
parent | 4990a151862569f4b649a8adb4c9eb5700b0fb65 (diff) | |
download | compiler-rt-89b4df6a6fb65f44d6633ac4d169756a49fe466e.tar.gz |
[compiler-rt] Add more assembly patterns for interception
Summary:
These patterns are encounter when using instrumented DLL.
Without this patch, asan lit test are crashing when trying to hook
on RaiseException function.
Reviewers: rnk
Subscribers: llvm-commits, wang0109, chrisha
Differential Revision: https://reviews.llvm.org/D22340
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@275489 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/interception/interception_win.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/interception/interception_win.cc b/lib/interception/interception_win.cc index 1db8ac481..8977d59ac 100644 --- a/lib/interception/interception_win.cc +++ b/lib/interception/interception_win.cc @@ -385,6 +385,11 @@ static uptr AllocateMemoryForTrampoline(uptr image_address, size_t size) { // Returns 0 on error. static size_t GetInstructionSize(uptr address) { + switch (*(u64*)address) { + case 0x90909090909006EB: // stub: jmp over 6 x nop. + return 8; + } + switch (*(u8*)address) { case 0x90: // 90 : nop return 1; @@ -499,7 +504,8 @@ static size_t GetInstructionSize(uptr address) { } switch (*(u32*)(address)) { - case 0x24448b48: // 48 8b 44 24 XX : mov rax, qword ptr [rsp + XX] + case 0x24448b48: // 48 8b 44 24 XX : mov rax, QWORD ptr [rsp + XX] + case 0x246c8948: // 48 89 6C 24 XX : mov QWORD ptr [rsp + XX], rbp case 0x245c8948: // 48 89 5c 24 XX : mov QWORD PTR [rsp + XX], rbx case 0x24748948: // 48 89 74 24 XX : mov QWORD PTR [rsp + XX], rsi return 5; |