Index: third_party/minicrt/pesect.c |
diff --git a/third_party/minicrt/pesect.c b/third_party/minicrt/pesect.c |
deleted file mode 100644 |
index e331ea84fbd188e6d9734a3a2cf7b2bf81bba5a9..0000000000000000000000000000000000000000 |
--- a/third_party/minicrt/pesect.c |
+++ /dev/null |
@@ -1,195 +0,0 @@ |
-/*** |
-*pesect.c - PE image header routines |
-* |
-* Copyright (c) Microsoft Corporation. All rights reserved. |
-* |
-*Purpose: |
-* Defines routines that query info from a PE image header. Because |
-* one of these queries the current PE image, via the linker-defined |
-* variable __ImageBase, this object must be a static-link component |
-* of any C Runtime library. |
-* |
-*******************************************************************************/ |
- |
-#include <windows.h> |
- |
-#if defined (_WIN64) && defined (_M_IA64) |
-#pragma section(".base", long, read) |
-__declspec(allocate(".base")) |
-extern IMAGE_DOS_HEADER __ImageBase; |
-#else /* defined (_WIN64) && defined (_M_IA64) */ |
-extern IMAGE_DOS_HEADER __ImageBase; |
-#endif /* defined (_WIN64) && defined (_M_IA64) */ |
- |
-#pragma optimize("t", on) // optimize for speed, not space |
- |
-/*** |
-*BOOL _ValidateImageBase |
-* |
-*Purpose: |
-* Check if a PE image is located at a potential image base address. |
-* |
-*Entry: |
-* pImageBase - pointer to potential PE image in memory |
-* |
-*Return: |
-* TRUE PE image validated at pImageBase |
-* FALSE PE image not found |
-* |
-*******************************************************************************/ |
- |
-BOOL __cdecl _ValidateImageBase( |
- PBYTE pImageBase |
- ) |
-{ |
- PIMAGE_DOS_HEADER pDOSHeader; |
- PIMAGE_NT_HEADERS pNTHeader; |
- PIMAGE_OPTIONAL_HEADER pOptHeader; |
- |
- pDOSHeader = (PIMAGE_DOS_HEADER)pImageBase; |
- if (pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE) |
- { |
- return FALSE; |
- } |
- |
- pNTHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDOSHeader + pDOSHeader->e_lfanew); |
- if (pNTHeader->Signature != IMAGE_NT_SIGNATURE) |
- { |
- return FALSE; |
- } |
- |
- pOptHeader = (PIMAGE_OPTIONAL_HEADER)&pNTHeader->OptionalHeader; |
- if (pOptHeader->Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC) |
- { |
- return FALSE; |
- } |
- |
- return TRUE; |
-} |
- |
-/*** |
-*PIMAGE_SECTION_HEADER _FindPESection |
-* |
-*Purpose: |
-* Given an RVA (Relative Virtual Address, the offset from the Image Base |
-* for a PE image), determine which PE section, if any, includes that RVA. |
-* |
-*Entry: |
-* pImageBase - pointer to PE image in memory |
-* rva - RVA whose enclosing section is to be found |
-* |
-*Return: |
-* NULL RVA is not part by any section in the PE image |
-* non-NULL Pointer to IMAGE_SECTION_HEADER describing the section holding |
-* the RVA |
-* |
-*******************************************************************************/ |
- |
-PIMAGE_SECTION_HEADER __cdecl _FindPESection( |
- PBYTE pImageBase, |
- DWORD_PTR rva |
- ) |
-{ |
- PIMAGE_NT_HEADERS pNTHeader; |
- PIMAGE_SECTION_HEADER pSection; |
- unsigned int iSection; |
- |
- pNTHeader = |
- (PIMAGE_NT_HEADERS) |
- (pImageBase + ((PIMAGE_DOS_HEADER)pImageBase)->e_lfanew); |
- |
- // |
- // Find the section holding the desired address. We make no assumptions |
- // here about the sort order of the section descriptors (though they |
- // always appear to be sorted by ascending section RVA). |
- // |
- for (iSection = 0, pSection = IMAGE_FIRST_SECTION(pNTHeader); |
- iSection < pNTHeader->FileHeader.NumberOfSections; |
- ++iSection, ++pSection) |
- { |
- if (rva >= pSection->VirtualAddress && |
- rva < pSection->VirtualAddress + pSection->Misc.VirtualSize) |
- { |
- // |
- // Section found |
- // |
- return pSection; |
- } |
- } |
- |
- // |
- // Section not found |
- // |
- return NULL; |
-} |
- |
-/*** |
-*BOOL _IsNonwritableInCurrentImage |
-* |
-*Purpose: |
-* Check if an address is located within the current PE image (the one |
-* starting at __ImageBase), that it is in a proper section of the image, |
-* and that section is not marked writable. This routine must be |
-* statically linked, not imported from the CRT DLL, so the correct |
-* __ImageBase is found. |
-* |
-*Entry: |
-* pTarget - address to check |
-* |
-*Return: |
-* 0 Address is either not in current image, not in a section, or |
-* in a writable section. |
-* non-0 Address is in a non-writable section of the current image. |
-* |
-*******************************************************************************/ |
- |
-BOOL __cdecl _IsNonwritableInCurrentImage( |
- PBYTE pTarget |
- ) |
-{ |
- PBYTE pImageBase; |
- DWORD_PTR rvaTarget; |
- PIMAGE_SECTION_HEADER pSection; |
- |
- pImageBase = (PBYTE)&__ImageBase; |
- |
- __try { |
- // |
- // Make sure __ImageBase does address a PE image. This is likely an |
- // unnecessary check, since we should be running from a normal image, |
- // but it is fast, this routine is rarely called, and the normal call |
- // is for security purposes. If we don't have a PE image, return |
- // failure. |
- // |
- if (!_ValidateImageBase(pImageBase)) |
- { |
- return FALSE; |
- } |
- |
- // |
- // Convert the targetaddress to a Relative Virtual Address (RVA) within |
- // the image, and find the corresponding PE section. Return failure if |
- // the target address is not found within the current image. |
- // |
- rvaTarget = pTarget - pImageBase; |
- pSection = _FindPESection(pImageBase, rvaTarget); |
- if (pSection == NULL) |
- { |
- return FALSE; |
- } |
- |
- // |
- // Check the section characteristics to see if the target address is |
- // located within a writable section, returning a failure if yes. |
- // |
- return (pSection->Characteristics & IMAGE_SCN_MEM_WRITE) == 0; |
- } |
- __except (GetExceptionCode() == STATUS_ACCESS_VIOLATION) |
- { |
- // |
- // Just return failure if the PE image is corrupted in any way that |
- // triggers an AV. |
- // |
- return FALSE; |
- } |
-} |