| Index: sandbox/win/src/sidestep/preamble_patcher.h
|
| diff --git a/sandbox/win/src/sidestep/preamble_patcher.h b/sandbox/win/src/sidestep/preamble_patcher.h
|
| deleted file mode 100644
|
| index 3a0985ce9fa0cb88f705f61027db6d645866e1fc..0000000000000000000000000000000000000000
|
| --- a/sandbox/win/src/sidestep/preamble_patcher.h
|
| +++ /dev/null
|
| @@ -1,111 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -// Definition of PreamblePatcher
|
| -
|
| -#ifndef SANDBOX_SRC_SIDESTEP_PREAMBLE_PATCHER_H__
|
| -#define SANDBOX_SRC_SIDESTEP_PREAMBLE_PATCHER_H__
|
| -
|
| -#include <stddef.h>
|
| -
|
| -namespace sidestep {
|
| -
|
| -// Maximum size of the preamble stub. We overwrite at least the first 5
|
| -// bytes of the function. Considering the worst case scenario, we need 4
|
| -// bytes + the max instruction size + 5 more bytes for our jump back to
|
| -// the original code. With that in mind, 32 is a good number :)
|
| -const size_t kMaxPreambleStubSize = 32;
|
| -
|
| -// Possible results of patching/unpatching
|
| -enum SideStepError {
|
| - SIDESTEP_SUCCESS = 0,
|
| - SIDESTEP_INVALID_PARAMETER,
|
| - SIDESTEP_INSUFFICIENT_BUFFER,
|
| - SIDESTEP_JUMP_INSTRUCTION,
|
| - SIDESTEP_FUNCTION_TOO_SMALL,
|
| - SIDESTEP_UNSUPPORTED_INSTRUCTION,
|
| - SIDESTEP_NO_SUCH_MODULE,
|
| - SIDESTEP_NO_SUCH_FUNCTION,
|
| - SIDESTEP_ACCESS_DENIED,
|
| - SIDESTEP_UNEXPECTED,
|
| -};
|
| -
|
| -// Implements a patching mechanism that overwrites the first few bytes of
|
| -// a function preamble with a jump to our hook function, which is then
|
| -// able to call the original function via a specially-made preamble-stub
|
| -// that imitates the action of the original preamble.
|
| -//
|
| -// Note that there are a number of ways that this method of patching can
|
| -// fail. The most common are:
|
| -// - If there is a jump (jxx) instruction in the first 5 bytes of
|
| -// the function being patched, we cannot patch it because in the
|
| -// current implementation we do not know how to rewrite relative
|
| -// jumps after relocating them to the preamble-stub. Note that
|
| -// if you really really need to patch a function like this, it
|
| -// would be possible to add this functionality (but at some cost).
|
| -// - If there is a return (ret) instruction in the first 5 bytes
|
| -// we cannot patch the function because it may not be long enough
|
| -// for the jmp instruction we use to inject our patch.
|
| -// - If there is another thread currently executing within the bytes
|
| -// that are copied to the preamble stub, it will crash in an undefined
|
| -// way.
|
| -//
|
| -// If you get any other error than the above, you're either pointing the
|
| -// patcher at an invalid instruction (e.g. into the middle of a multi-
|
| -// byte instruction, or not at memory containing executable instructions)
|
| -// or, there may be a bug in the disassembler we use to find
|
| -// instruction boundaries.
|
| -class PreamblePatcher {
|
| - public:
|
| - // Patches target_function to point to replacement_function using a provided
|
| - // preamble_stub of stub_size bytes.
|
| - // Returns An error code indicating the result of patching.
|
| - template <class T>
|
| - static SideStepError Patch(T target_function, T replacement_function,
|
| - void* preamble_stub, size_t stub_size) {
|
| - return RawPatchWithStub(target_function, replacement_function,
|
| - reinterpret_cast<unsigned char*>(preamble_stub),
|
| - stub_size, NULL);
|
| - }
|
| -
|
| - private:
|
| -
|
| - // Patches a function by overwriting its first few bytes with
|
| - // a jump to a different function. This is similar to the RawPatch
|
| - // function except that it uses the stub allocated by the caller
|
| - // instead of allocating it.
|
| - //
|
| - // To use this function, you first have to call VirtualProtect to make the
|
| - // target function writable at least for the duration of the call.
|
| - //
|
| - // target_function: A pointer to the function that should be
|
| - // patched.
|
| - //
|
| - // replacement_function: A pointer to the function that should
|
| - // replace the target function. The replacement function must have
|
| - // exactly the same calling convention and parameters as the original
|
| - // function.
|
| - //
|
| - // preamble_stub: A pointer to a buffer where the preamble stub
|
| - // should be copied. The size of the buffer should be sufficient to
|
| - // hold the preamble bytes.
|
| - //
|
| - // stub_size: Size in bytes of the buffer allocated for the
|
| - // preamble_stub
|
| - //
|
| - // bytes_needed: Pointer to a variable that receives the minimum
|
| - // number of bytes required for the stub. Can be set to NULL if you're
|
| - // not interested.
|
| - //
|
| - // Returns An error code indicating the result of patching.
|
| - static SideStepError RawPatchWithStub(void* target_function,
|
| - void *replacement_function,
|
| - unsigned char* preamble_stub,
|
| - size_t stub_size,
|
| - size_t* bytes_needed);
|
| -};
|
| -
|
| -}; // namespace sidestep
|
| -
|
| -#endif // SANDBOX_SRC_SIDESTEP_PREAMBLE_PATCHER_H__
|
|
|