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 { 2507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// returns true if a function with the given name was found. 26bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonovbool GetRealFunctionAddress(const char *func_name, uptr *func_addr); 272716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov 282716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov// returns true if the old function existed, false on failure. 29bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonovbool OverrideFunction(uptr old_func, uptr new_func, uptr *orig_old_func); 3007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov} // namespace __interception 3107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 322716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#if defined(_DLL) 332716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov# define INTERCEPT_FUNCTION_WIN(func) \ 34bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov ::__interception::GetRealFunctionAddress( \ 35bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov #func, (::__interception::uptr*)&REAL(func)) 362716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#else 372716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov# define INTERCEPT_FUNCTION_WIN(func) \ 38bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov ::__interception::OverrideFunction( \ 39bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov (::__interception::uptr)func, \ 40bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov (::__interception::uptr)WRAP(func), \ 41bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov (::__interception::uptr*)&REAL(func)) 422716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#endif 4307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov 445e2d3776a314629680921abd1d55d89d95a2da90Alexey Samsonov#define INTERCEPT_FUNCTION_VER_WIN(func, symver) \ 455e2d3776a314629680921abd1d55d89d95a2da90Alexey Samsonov INTERCEPT_FUNCTION_WIN(func) 465e2d3776a314629680921abd1d55d89d95a2da90Alexey Samsonov 4707bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif // INTERCEPTION_WIN_H 4807bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif // _WIN32 49