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

Unified Diff: chrome/browser/safe_browsing/pe_image_reader_win.h

Issue 1015363003: Move BinaryFeatureExtractor and PEImageReader to common. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@zip2
Patch Set: sync to position 321353 Created 5 years, 9 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
Index: chrome/browser/safe_browsing/pe_image_reader_win.h
diff --git a/chrome/browser/safe_browsing/pe_image_reader_win.h b/chrome/browser/safe_browsing/pe_image_reader_win.h
deleted file mode 100644
index f64891c3e1511de65fc2c51252c08cba8ad4235d..0000000000000000000000000000000000000000
--- a/chrome/browser/safe_browsing/pe_image_reader_win.h
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef CHROME_BROWSER_SAFE_BROWSING_PE_IMAGE_READER_WIN_H_
-#define CHROME_BROWSER_SAFE_BROWSING_PE_IMAGE_READER_WIN_H_
-
-#include <windows.h>
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-
-namespace safe_browsing {
-
-// Parses headers and various data from a PE image. This parser is safe for use
-// on untrusted data.
-class PeImageReader {
- public:
- enum WordSize {
- WORD_SIZE_32,
- WORD_SIZE_64,
- };
-
- PeImageReader();
- ~PeImageReader();
-
- // Returns false if the given data does not appear to be a valid PE image.
- bool Initialize(const uint8_t* image_data, size_t image_size);
-
- // Returns the machine word size for the image.
- WordSize GetWordSize();
-
- const IMAGE_DOS_HEADER* GetDosHeader();
- const IMAGE_FILE_HEADER* GetCoffFileHeader();
-
- // Returns a pointer to the optional header and its size.
- const uint8_t* GetOptionalHeaderData(size_t* optional_data_size);
- size_t GetNumberOfSections();
- const IMAGE_SECTION_HEADER* GetSectionHeaderAt(size_t index);
-
- // Returns a pointer to the image's export data (.edata) section and its size,
- // or NULL if the section is not present.
- const uint8_t* GetExportSection(size_t* section_size);
-
- size_t GetNumberOfDebugEntries();
- const IMAGE_DEBUG_DIRECTORY* GetDebugEntry(size_t index,
- const uint8_t** raw_data,
- size_t* raw_data_size);
-
- private:
- // Bits indicating what portions of the image have been validated.
- enum ValidationStages {
- VALID_DOS_HEADER = 1 << 0,
- VALID_PE_SIGNATURE = 1 << 1,
- VALID_COFF_FILE_HEADER = 1 << 2,
- VALID_OPTIONAL_HEADER = 1 << 3,
- VALID_SECTION_HEADERS = 1 << 4,
- };
-
- // An interface to an image's optional header.
- class OptionalHeader {
- public:
- virtual ~OptionalHeader() {}
-
- virtual WordSize GetWordSize() = 0;
-
- // Returns the offset of the DataDirectory member relative to the start of
- // the optional header.
- virtual size_t GetDataDirectoryOffset() = 0;
-
- // Returns the number of entries in the data directory.
- virtual DWORD GetDataDirectorySize() = 0;
-
- // Returns a pointer to the first data directory entry.
- virtual const IMAGE_DATA_DIRECTORY* GetDataDirectoryEntries() = 0;
- };
-
- template<class OPTIONAL_HEADER_TYPE>
- class OptionalHeaderImpl;
-
- void Clear();
- bool ValidateDosHeader();
- bool ValidatePeSignature();
- bool ValidateCoffFileHeader();
- bool ValidateOptionalHeader();
- bool ValidateSectionHeaders();
-
- // Return a pointer to the first byte of the image's optional header.
- const uint8_t* GetOptionalHeaderStart();
- size_t GetOptionalHeaderSize();
-
- // Returns the desired directory entry, or NULL if |index| is out of bounds.
- const IMAGE_DATA_DIRECTORY* GetDataDirectoryEntryAt(size_t index);
-
- // Returns the header for the section that contains the given address, or NULL
- // if the address is out of bounds or the image does not contain the section.
- const IMAGE_SECTION_HEADER* FindSectionFromRva(uint32_t relative_address);
-
- // Returns a pointer to the |data_length| bytes referenced by the |index|'th
- // data directory entry.
- const uint8_t* GetImageData(size_t index, size_t* data_length);
-
- // Populates |structure| with a pointer to a desired structure of type T at
- // the given offset if the image is sufficiently large to contain it. Returns
- // false if the structure does not fully fit within the image at the given
- // offset.
- template<typename T> bool GetStructureAt(size_t offset, const T** structure) {
- return GetStructureAt(offset, sizeof(**structure), structure);
- }
-
- // Populates |structure| with a pointer to a desired structure of type T at
- // the given offset if the image is sufficiently large to contain
- // |structure_size| bytes. Returns false if the structure does not fully fit
- // within the image at the given offset.
- template<typename T> bool GetStructureAt(size_t offset,
- size_t structure_size,
- const T** structure) {
- if (offset > image_size_)
- return false;
- if (structure_size > image_size_ - offset)
- return false;
- *structure = reinterpret_cast<const T*>(image_data_ + offset);
- return true;
- }
-
- const uint8_t* image_data_;
- size_t image_size_;
- uint32_t validation_state_;
- scoped_ptr<OptionalHeader> optional_header_;
- DISALLOW_COPY_AND_ASSIGN(PeImageReader);
-};
-
-} // namespace safe_browsing
-
-#endif // CHROME_BROWSER_SAFE_BROWSING_PE_IMAGE_READER_WIN_H_

Powered by Google App Engine
This is Rietveld 408576698