security/sandbox/win/src/resolver.cc

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved.
     2 // Use of this source code is governed by a BSD-style license that can be
     3 // found in the LICENSE file.
     5 #include "sandbox/win/src/resolver.h"
     7 #include "base/win/pe_image.h"
     8 #include "sandbox/win/src/sandbox_nt_util.h"
    10 namespace sandbox {
    12 NTSTATUS ResolverThunk::Init(const void* target_module,
    13                              const void* interceptor_module,
    14                              const char* target_name,
    15                              const char* interceptor_name,
    16                              const void* interceptor_entry_point,
    17                              void* thunk_storage,
    18                              size_t storage_bytes) {
    19   if (NULL == thunk_storage || 0 == storage_bytes ||
    20       NULL == target_module || NULL == target_name)
    21     return STATUS_INVALID_PARAMETER;
    23   if (storage_bytes < GetThunkSize())
    24     return STATUS_BUFFER_TOO_SMALL;
    26   NTSTATUS ret = STATUS_SUCCESS;
    27   if (NULL == interceptor_entry_point) {
    28     ret = ResolveInterceptor(interceptor_module, interceptor_name,
    29                              &interceptor_entry_point);
    30     if (!NT_SUCCESS(ret))
    31       return ret;
    32   }
    34   ret = ResolveTarget(target_module, target_name, &target_);
    35   if (!NT_SUCCESS(ret))
    36     return ret;
    38   interceptor_ = interceptor_entry_point;
    40   return ret;
    41 }
    43 NTSTATUS ResolverThunk::ResolveInterceptor(const void* interceptor_module,
    44                                            const char* interceptor_name,
    45                                            const void** address) {
    46   DCHECK_NT(address);
    47   if (!interceptor_module)
    48     return STATUS_INVALID_PARAMETER;
    50   base::win::PEImage pe(interceptor_module);
    51   if (!pe.VerifyMagic())
    52     return STATUS_INVALID_IMAGE_FORMAT;
    54   *address = pe.GetProcAddress(interceptor_name);
    56   if (!(*address))
    57     return STATUS_PROCEDURE_NOT_FOUND;
    59   return STATUS_SUCCESS;
    60 }
    62 }  // namespace sandbox

mercurial