Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: third_party/minicrt/pesect.c

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/minicrt/newdel.cc ('k') | third_party/minicrt/puts.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
- }
-}
« no previous file with comments | « third_party/minicrt/newdel.cc ('k') | third_party/minicrt/puts.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698