Index: sandbox/win/src/resolver_32.cc |
diff --git a/sandbox/win/src/resolver_32.cc b/sandbox/win/src/resolver_32.cc |
deleted file mode 100644 |
index 25df11cc43c579ea30dc33aadbd1619b1be82053..0000000000000000000000000000000000000000 |
--- a/sandbox/win/src/resolver_32.cc |
+++ /dev/null |
@@ -1,94 +0,0 @@ |
-// Copyright (c) 2006-2010 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. |
- |
-#include "sandbox/win/src/resolver.h" |
- |
-#include <stddef.h> |
- |
-// For placement new. This file must not depend on the CRT at runtime, but |
-// placement operator new is inline. |
-#include <new> |
- |
-#include "sandbox/win/src/sandbox_nt_util.h" |
- |
-namespace { |
- |
-#pragma pack(push, 1) |
-struct InternalThunk { |
- // This struct contains roughly the following code: |
- // sub esp, 8 // Create working space |
- // push edx // Save register |
- // mov edx, [esp + 0xc] // Get return adddress |
- // mov [esp + 8], edx // Store return address |
- // mov dword ptr [esp + 0xc], 0x7c401200 // Store extra argument |
- // mov dword ptr [esp + 4], 0x40010203 // Store address to jump to |
- // pop edx // Restore register |
- // ret // Jump to interceptor |
- // |
- // This code only modifies esp and eip so it must work with to normal calling |
- // convention. It is assembled as: |
- // |
- // 00 83ec08 sub esp,8 |
- // 03 52 push edx |
- // 04 8b54240c mov edx,dword ptr [esp + 0Ch] |
- // 08 89542408 mov dword ptr [esp + 8], edx |
- // 0c c744240c0012407c mov dword ptr [esp + 0Ch], 7C401200h |
- // 14 c744240403020140 mov dword ptr [esp + 4], 40010203h |
- // 1c 5a pop edx |
- // 1d c3 ret |
- InternalThunk() { |
- opcodes_1 = 0x5208ec83; |
- opcodes_2 = 0x0c24548b; |
- opcodes_3 = 0x08245489; |
- opcodes_4 = 0x0c2444c7; |
- opcodes_5 = 0x042444c7; |
- opcodes_6 = 0xc35a; |
- extra_argument = 0; |
- interceptor_function = 0; |
- }; |
- ULONG opcodes_1; // = 0x5208ec83 |
- ULONG opcodes_2; // = 0x0c24548b |
- ULONG opcodes_3; // = 0x08245489 |
- ULONG opcodes_4; // = 0x0c2444c7 |
- ULONG extra_argument; |
- ULONG opcodes_5; // = 0x042444c7 |
- ULONG interceptor_function; |
- USHORT opcodes_6; // = 0xc35a |
-}; |
-#pragma pack(pop) |
- |
-}; // namespace |
- |
-namespace sandbox { |
- |
-bool ResolverThunk::SetInternalThunk(void* storage, size_t storage_bytes, |
- const void* original_function, |
- const void* interceptor) { |
- if (storage_bytes < sizeof(InternalThunk)) |
- return false; |
- |
- InternalThunk* thunk = new(storage) InternalThunk; |
- |
-#pragma warning(push) |
-#pragma warning(disable: 4311) |
- // These casts generate warnings because they are 32 bit specific. |
- thunk->interceptor_function = reinterpret_cast<ULONG>(interceptor); |
- thunk->extra_argument = reinterpret_cast<ULONG>(original_function); |
-#pragma warning(pop) |
- |
- return true; |
-} |
- |
-size_t ResolverThunk::GetInternalThunkSize() const { |
- return sizeof(InternalThunk); |
-} |
- |
-NTSTATUS ResolverThunk::ResolveTarget(const void* module, |
- const char* function_name, |
- void** address) { |
- const void** casted = const_cast<const void**>(address); |
- return ResolverThunk::ResolveInterceptor(module, function_name, casted); |
-} |
- |
-} // namespace sandbox |