hanchenye-llvm-project/compiler-rt/lib/asan
Reid Kleckner d6371ea52a [asan] Intercept RtlRaiseException instead of kernel32!RaiseException
Summary:
On my install of Windows 10, RaiseException is a tail call to
kernelbase!RaiseException. Obviously, we fail to intercept that.
Instead, try hooking at the ntdll!RtlRaiseException layer. It is
unlikely that this layer will contain control flow.

Intercepting at this level requires adding a decoding for
'LEA ESP, [ESP + 0xXXXXXXXX]', which is a really obscure way to write
'SUB ESP, 0xXXXXXXXX' that avoids clobbering EFLAGS.

Reviewers: etienneb

Subscribers: llvm-commits, kubabrecka

Differential Revision: https://reviews.llvm.org/D23046

llvm-svn: 277518
2016-08-02 20:36:29 +00:00
..
scripts [asan] Workaround LD_PRELOAD bug in the Android linker. 2016-05-24 21:25:00 +00:00
tests [compiler-rt] Fix warnings in interception code 2016-07-27 16:16:54 +00:00
.clang-format Tell clang-format that (most) sanitizers are written using Google style guide. 2015-11-19 22:11:10 +00:00
CMakeLists.txt missing modifications for http://reviews.llvm.org/D21952 2016-07-11 23:09:33 +00:00
README.txt [ASan] Fix the links to bugs and wikipages. 2015-12-04 17:37:40 +00:00
asan.syms.extra
asan_activation.cc [sanitizier] initializing common flags. 2016-03-21 20:53:20 +00:00
asan_activation.h
asan_activation_flags.inc
asan_allocator.cc In asan on Windows 64-bit, this is one of the broken things 2016-06-14 18:05:45 +00:00
asan_allocator.h [asan] add an interface function __sanitizer_print_memory_profile (a basic memory profiler; asan/Linux-only for now) 2016-06-02 01:21:52 +00:00
asan_blacklist.txt
asan_debugging.cc [compiler-rt] Apply modernize-use-nullptr fixes in sanitizers 2015-10-01 00:22:21 +00:00
asan_fake_stack.cc [asan] Fix shifting compiler warnings when compiler in 64-bits 2016-06-21 14:53:16 +00:00
asan_fake_stack.h [asan] Fix shifting compiler warnings when compiler in 64-bits 2016-06-21 14:53:16 +00:00
asan_flags.cc [sanitizer] Add strchr* to the common interceptors 2016-03-21 21:36:17 +00:00
asan_flags.h
asan_flags.inc Add detect_stack_use_after_scope runtime flag 2016-07-19 18:11:08 +00:00
asan_globals.cc [asan] Add runtime support for __asan_(un)register_image_globals 2016-03-28 20:28:17 +00:00
asan_init_version.h [asan] Add runtime support for __asan_(un)register_image_globals 2016-03-28 20:28:17 +00:00
asan_interceptors.cc [compiler-rt] Fix warnings in interception code 2016-07-27 16:16:54 +00:00
asan_interceptors.h [asan] Add __strdup interceptor. 2016-04-20 22:45:23 +00:00
asan_interface_internal.h Add detect_stack_use_after_scope runtime flag 2016-07-19 18:11:08 +00:00
asan_internal.h [asan] Add exception handler to map memory on demand on Win64. 2016-07-11 21:40:59 +00:00
asan_linux.cc [asan] Add exception handler to map memory on demand on Win64. 2016-07-11 21:40:59 +00:00
asan_lock.h
asan_mac.cc [asan] Add exception handler to map memory on demand on Win64. 2016-07-11 21:40:59 +00:00
asan_malloc_linux.cc [asan] Fix asan initialization failure with newer (2.23+) glibc in use. 2016-05-16 07:20:53 +00:00
asan_malloc_mac.cc [ASan] Retire mac_ignore_invalid_free, remove some dead code. 2015-12-04 16:17:55 +00:00
asan_malloc_win.cc [asan] Intercept all Heap* related imports from ucrtbase.dll 2016-03-24 20:19:48 +00:00
asan_mapping.h Change the shadow memory address for win64. 2016-06-21 15:11:24 +00:00
asan_memory_profile.cc [asan] fix arm build 2016-06-02 04:01:58 +00:00
asan_new_delete.cc [asan] Export new and delete operators on Windows 2016-03-23 20:45:52 +00:00
asan_poisoning.cc Add detect_stack_use_after_scope runtime flag 2016-07-19 18:11:08 +00:00
asan_poisoning.h Add descriptive names to sanitizer entries in /proc/self/maps. Helps debugging. 2015-05-29 22:31:28 +00:00
asan_posix.cc [sanitizers] introduce __sanitizer_set_report_fd so that we can re-route the sanitizer logging to another fd from inside the process 2016-05-27 21:23:05 +00:00
asan_preinit.cc
asan_report.cc [asan] Fix a deadlock halt_on_error-signals.c when `reporting_thread_tid_` is 0 2016-05-31 08:47:18 +00:00
asan_report.h [asan] Prefer alloc-dealloc-mismatch to new-delete-type-mismatch. 2016-04-13 21:04:27 +00:00
asan_rtl.cc Add detect_stack_use_after_scope runtime flag 2016-07-19 18:11:08 +00:00
asan_scariness_score.h [asan] fix the Windows build (MSVC says: cannot specify explicit initializer for arrays) 2016-02-08 19:33:36 +00:00
asan_stack.cc
asan_stack.h [LSAN] Fix test swapcontext.cc on MIPS 2016-05-18 06:09:26 +00:00
asan_stats.cc [ASan] Clean up obsolete stats. 2015-06-26 19:18:02 +00:00
asan_stats.h [ASan] Clean up obsolete stats. 2015-06-26 19:18:02 +00:00
asan_suppressions.cc [scan-build] fix logic error warning emitted on compiler-rt code base 2016-05-02 19:07:20 +00:00
asan_suppressions.h
asan_thread.cc [asan] add primitives that allow coroutine implementations 2016-06-21 12:29:18 +00:00
asan_thread.h [asan] add primitives that allow coroutine implementations 2016-06-21 12:29:18 +00:00
asan_win.cc [asan] Intercept RtlRaiseException instead of kernel32!RaiseException 2016-08-02 20:36:29 +00:00
asan_win_dll_thunk.cc [compiler-rt] Fix various typos in asan dll [NFC] 2016-08-01 15:08:12 +00:00
asan_win_dynamic_runtime_thunk.cc fix comments typos [NFC] 2016-08-02 20:07:49 +00:00

README.txt

AddressSanitizer RT
================================
This directory contains sources of the AddressSanitizer (ASan) runtime library.

Directory structure:
README.txt       : This file.
Makefile.mk      : File for make-based build.
CMakeLists.txt   : File for cmake-based build.
asan_*.{cc,h}    : Sources of the asan runtime library.
scripts/*        : Helper scripts.
tests/*          : ASan unit tests.

Also ASan runtime needs the following libraries:
lib/interception/      : Machinery used to intercept function calls.
lib/sanitizer_common/  : Code shared between various sanitizers.

ASan runtime currently also embeds part of LeakSanitizer runtime for
leak detection (lib/lsan/lsan_common.{cc,h}).

ASan runtime can only be built by CMake. You can run ASan tests
from the root of your CMake build tree:

make check-asan

For more instructions see:
https://github.com/google/sanitizers/wiki/AddressSanitizerHowToBuild