| Index: chrome_elf/hook_util/hook_util.h
|
| diff --git a/chrome_elf/hook_util/hook_util.h b/chrome_elf/hook_util/hook_util.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..91850451e80a7b230ced84b9a5ddf237e19fe0ed
|
| --- /dev/null
|
| +++ b/chrome_elf/hook_util/hook_util.h
|
| @@ -0,0 +1,66 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_ELF_HOOK_UTIL_THUNK_GETTER_H_
|
| +#define CHROME_ELF_HOOK_UTIL_THUNK_GETTER_H_
|
| +
|
| +#include <windows.h>
|
| +
|
| +#include "base/macros.h"
|
| +
|
| +namespace sandbox {
|
| +class ServiceResolverThunk;
|
| +}
|
| +
|
| +namespace elf_hook {
|
| +
|
| +//------------------------------------------------------------------------------
|
| +// System Service hooking support
|
| +//------------------------------------------------------------------------------
|
| +
|
| +// Creates a |ServiceResolverThunk| based on the OS version. Ownership of the
|
| +// resulting thunk is passed to the caller.
|
| +sandbox::ServiceResolverThunk* HookSystemService(bool relaxed);
|
| +
|
| +//------------------------------------------------------------------------------
|
| +// Import Address Table hooking support
|
| +//------------------------------------------------------------------------------
|
| +class IATHook {
|
| + public:
|
| + IATHook();
|
| + ~IATHook();
|
| +
|
| + // Intercept a function in an import table of a specific
|
| + // module. Saves everything needed to Unhook.
|
| + //
|
| + // NOTE: Hook can only be called once at a time, to enable Unhook().
|
| + //
|
| + // Arguments:
|
| + // module Module to be intercepted
|
| + // imported_from_module Module that exports the 'function_name'
|
| + // function_name Name of the API to be intercepted
|
| + // new_function New function pointer
|
| + //
|
| + // Returns: Windows error code (winerror.h). NO_ERROR if successful.
|
| + DWORD Hook(HMODULE module,
|
| + const char* imported_from_module,
|
| + const char* function_name,
|
| + void* new_function);
|
| +
|
| + // Unhook the IAT entry.
|
| + //
|
| + // Returns: Windows error code (winerror.h). NO_ERROR if successful.
|
| + DWORD Unhook();
|
| +
|
| + private:
|
| + void* intercept_function_;
|
| + void* original_function_;
|
| + IMAGE_THUNK_DATA* iat_thunk_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(IATHook);
|
| +};
|
| +
|
| +} // namespace elf_hook
|
| +
|
| +#endif // CHROME_ELF_HOOK_UTIL_THUNK_GETTER_H_
|
|
|