Name Description Size Coverage
Authenticode.cpp 16255 -
Authenticode.h 912 -
CacheNtDllThunk.cpp 1739 -
CacheNtDllThunk.h 658 -
gen_dll_blocklist_defs.py /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This file was auto-generated from {0} by gen_dll_blocklist_data.py. */ #ifndef mozilla_{1}_h #define mozilla_{1}_h 24943 -
interceptor -
LoaderAPIInterfaces.h Notification that a DLL load has begun. @param aContext Outparam that allows this observer to store any context information pertaining to the current load. @param aRequestedDllName The DLL name requested by whatever invoked the loader. This name may not match the effective name of the DLL once the loader has completed its path search. 4418 -
LoaderObserver.cpp 4035 -
LoaderObserver.h 1468 -
ModuleLoadFrame.cpp static 3527 -
ModuleLoadFrame.h 1306 -
ModuleLoadInfo.h This constructor is for use by the LdrLoadDll hook. 5706 -
moz.build 2078 -
nsWindowsDllInterceptor.h Simple function interception. We have two separate mechanisms for intercepting a function: We can use the built-in nop space, if it exists, or we can create a detour. Using the built-in nop space works as follows: On x86-32, DLL functions begin with a two-byte nop (mov edi, edi) and are preceeded by five bytes of NOP instructions. When we detect a function with this prelude, we do the following: 1. Write a long jump to our interceptor function into the five bytes of NOPs before the function. 2. Write a short jump -5 into the two-byte nop at the beginning of the function. This mechanism is nice because it's thread-safe. It's even safe to do if another thread is currently running the function we're modifying! When the WindowsDllNopSpacePatcher is destroyed, we overwrite the short jump but not the long jump, so re-intercepting the same function won't work, because its prelude won't match. Unfortunately nop space patching doesn't work on functions which don't have this magic prelude (and in particular, x86-64 never has the prelude). So when we can't use the built-in nop space, we fall back to using a detour, which works as follows: 1. Save first N bytes of OrigFunction to trampoline, where N is a number of bytes >= 5 that are instruction aligned. 2. Replace first 5 bytes of OrigFunction with a jump to the Hook function. 3. After N bytes of the trampoline, add a jump to OrigFunction+N to continue original program flow. 4. Hook function needs to call the trampoline during its execution, to invoke the original function (so address of trampoline is returned). When the WindowsDllDetourPatcher object is destructed, OrigFunction is patched again to jump directly to the trampoline instead of going through the hook function. As such, re-intercepting the same function won't work, as jump instructions are not supported. Note that this is not thread-safe. Sad day. 25333 -
NtLoaderAPI.h 717 -
SharedSection.h 1215 -
WindowsBCryptInitialization.cpp 748 -
WindowsBCryptInitialization.h 1033 -
WindowsDllBlocklist.cpp Some versions of Windows call LoadLibraryEx to get the version information for a DLL, which causes our patched LdrLoadDll implementation to re-enter itself and cause infinite recursion and a stack-exhaustion crash. We protect against reentrancy by allowing recursive loads of the same DLL. Note that we don't use __declspec(thread) because that doesn't work in DLLs loaded via LoadLibrary and there can be a limited number of TLS slots, so we roll our own. 23520 -
WindowsDllBlocklist.h 3480 -
WindowsDllBlocklistCommon.h 1851 -
WindowsDllBlocklistDefs.in 21222 -
WindowsDllBlocklistInfo.h 3913 -
WindowsDllServices.h WARNING: This method is called from within an unsafe context that holds multiple locks inside the Windows loader. The only thing that this function should be used for is dispatching the event to our event loop so that it may be handled in a safe context. 7985 -
WindowsFallbackLoaderAPI.cpp 2786 -
WindowsFallbackLoaderAPI.h 1468 -
WindowsMsctfInitialization.cpp 2992 -
WindowsMsctfInitialization.h 858 -
WindowsOleAut32Initialization.cpp 1105 -
WindowsOleAut32Initialization.h 734 -
WindowsStackWalkInitialization.cpp 8870 -
WindowsStackWalkInitialization.h 920 -