107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//===-- interception_linux.h ------------------------------------*- C++ -*-===// 207bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// 307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// The LLVM Compiler Infrastructure 407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// 507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// This file is distributed under the University of Illinois Open Source 607bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// License. See LICENSE.TXT for details. 707bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// 807bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//===----------------------------------------------------------------------===// 907bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// 1007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// This file is a part of AddressSanitizer, an address sanity checker. 1107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// 1207bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// Windows-specific interception methods. 1307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//===----------------------------------------------------------------------===// 1407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 1507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#ifdef _WIN32 1607bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 1707bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#if !defined(INCLUDED_FROM_INTERCEPTION_LIB) 1807bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov# error "interception_win.h should be included from interception library only" 1907bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif 2007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 2107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#ifndef INTERCEPTION_WIN_H 2207bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#define INTERCEPTION_WIN_H 2307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 2407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanovnamespace __interception { 256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// All the functions in the OverrideFunction() family return true on success, 266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// false on failure (including "couldn't find the function"). 272716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov 286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// Overrides a function by its address. 296d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesbool OverrideFunction(uptr old_func, uptr new_func, uptr *orig_old_func = 0); 306d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 316d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// Overrides a function in a system DLL or DLL CRT by its exported name. 326d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesbool OverrideFunction(const char *name, uptr new_func, uptr *orig_old_func = 0); 3307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov} // namespace __interception 3407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 356d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#if defined(INTERCEPTION_DYNAMIC_CRT) 366d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#define INTERCEPT_FUNCTION_WIN(func) \ 376d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ::__interception::OverrideFunction(#func, \ 386d1862363c88c183b0ed7740fca876342cf0474bStephen Hines (::__interception::uptr)WRAP(func), \ 396d1862363c88c183b0ed7740fca876342cf0474bStephen Hines (::__interception::uptr *)&REAL(func)) 402716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#else 416d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#define INTERCEPT_FUNCTION_WIN(func) \ 426d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ::__interception::OverrideFunction((::__interception::uptr)func, \ 436d1862363c88c183b0ed7740fca876342cf0474bStephen Hines (::__interception::uptr)WRAP(func), \ 446d1862363c88c183b0ed7740fca876342cf0474bStephen Hines (::__interception::uptr *)&REAL(func)) 452716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#endif 4607bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 476d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#define INTERCEPT_FUNCTION_VER_WIN(func, symver) INTERCEPT_FUNCTION_WIN(func) 485e2d3776a314629680921abd1d55d89d95a2da90Alexey Samsonov 4907bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif // INTERCEPTION_WIN_H 5007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif // _WIN32 51