summaryrefslogtreecommitdiff
path: root/tools/pe_bliss/pe_properties_generic.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/pe_bliss/pe_properties_generic.h')
-rw-r--r--tools/pe_bliss/pe_properties_generic.h277
1 files changed, 0 insertions, 277 deletions
diff --git a/tools/pe_bliss/pe_properties_generic.h b/tools/pe_bliss/pe_properties_generic.h
deleted file mode 100644
index 4ff906803c..0000000000
--- a/tools/pe_bliss/pe_properties_generic.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/*************************************************************************/
-/* Copyright (c) 2015 dx, http://kaimi.ru */
-/* */
-/* Permission is hereby granted, free of charge, to any person */
-/* obtaining a copy of this software and associated documentation */
-/* files (the "Software"), to deal in the Software without */
-/* restriction, including without limitation the rights to use, */
-/* copy, modify, merge, publish, distribute, sublicense, and/or */
-/* sell copies of the Software, and to permit persons to whom the */
-/* Software is furnished to do so, subject to the following conditions: */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "pe_properties.h"
-
-namespace pe_bliss
-{
-//Helper class to reduce code size and ease its editing
-template<
- typename NtHeadersType,
- typename OptHeadersType,
- uint16_t IdVal,
- typename BaseSizeType,
- BaseSizeType ImportSnapFlagVal,
- typename TLSStructType,
- typename ConfigStructType>
-class pe_types
-{
-public:
- typedef NtHeadersType NtHeaders; //NT HEADERS type
- typedef OptHeadersType OptHeaders; //NT OPTIONAL HEADER type
- typedef BaseSizeType BaseSize; //Base size of different values: DWORD or ULONGLONG
- typedef TLSStructType TLSStruct; //TLS structure type
- typedef ConfigStructType ConfigStruct; //Configuration structure type
-
- static const uint16_t Id = IdVal; //Magic of PE or PE+
- static const BaseSize ImportSnapFlag = ImportSnapFlagVal; //Import snap flag value
-};
-
-//Portable Executable derived class for PE and PE+
-//Describes PE/PE+ dependent things
-template<typename PEClassType>
-class pe_properties_generic : public pe_properties
-{
-public: //Constructor
- virtual std::auto_ptr<pe_properties> duplicate() const;
-
- //Fills properly PE structures
- virtual void create_pe(uint32_t section_alignment, uint16_t subsystem);
-
-public:
- //Destructor
- virtual ~pe_properties_generic();
-
-
-public: //DIRECTORIES
- //Returns true if directory exists
- virtual bool directory_exists(uint32_t id) const;
-
- //Removes directory
- virtual void remove_directory(uint32_t id);
-
- //Returns directory RVA
- virtual uint32_t get_directory_rva(uint32_t id) const;
- //Returns directory size
- virtual uint32_t get_directory_size(uint32_t id) const;
-
- //Sets directory RVA (just a value of PE header, no moving occurs)
- virtual void set_directory_rva(uint32_t id, uint32_t rva);
- //Sets directory size (just a value of PE header, no moving occurs)
- virtual void set_directory_size(uint32_t id, uint32_t size);
-
- //Strips only zero DATA_DIRECTORY entries to count = min_count
- //Returns resulting number of data directories
- //strip_iat_directory - if true, even not empty IAT directory will be stripped
- virtual uint32_t strip_data_directories(uint32_t min_count = 1, bool strip_iat_directory = true);
-
-
-public: //IMAGE
- //Returns PE type of this image
- virtual pe_type get_pe_type() const;
-
-
-public: //PE HEADER
- //Returns image base for PE32 and PE64 respectively
- virtual uint32_t get_image_base_32() const;
- virtual uint64_t get_image_base_64() const;
-
- //Sets new image base for PE32
- virtual void set_image_base(uint32_t base);
- //Sets new image base for PE32/PE+
- virtual void set_image_base_64(uint64_t base);
-
- //Returns image entry point
- virtual uint32_t get_ep() const;
- //Sets image entry point
- virtual void set_ep(uint32_t new_ep);
-
- //Returns file alignment
- virtual uint32_t get_file_alignment() const;
- //Returns section alignment
- virtual uint32_t get_section_alignment() const;
-
- //Sets heap size commit for PE32 and PE64 respectively
- virtual void set_heap_size_commit(uint32_t size);
- virtual void set_heap_size_commit(uint64_t size);
- //Sets heap size reserve for PE32 and PE64 respectively
- virtual void set_heap_size_reserve(uint32_t size);
- virtual void set_heap_size_reserve(uint64_t size);
- //Sets stack size commit for PE32 and PE64 respectively
- virtual void set_stack_size_commit(uint32_t size);
- virtual void set_stack_size_commit(uint64_t size);
- //Sets stack size reserve for PE32 and PE64 respectively
- virtual void set_stack_size_reserve(uint32_t size);
- virtual void set_stack_size_reserve(uint64_t size);
-
- //Returns heap size commit for PE32 and PE64 respectively
- virtual uint32_t get_heap_size_commit_32() const;
- virtual uint64_t get_heap_size_commit_64() const;
- //Returns heap size reserve for PE32 and PE64 respectively
- virtual uint32_t get_heap_size_reserve_32() const;
- virtual uint64_t get_heap_size_reserve_64() const;
- //Returns stack size commit for PE32 and PE64 respectively
- virtual uint32_t get_stack_size_commit_32() const;
- virtual uint64_t get_stack_size_commit_64() const;
- //Returns stack size reserve for PE32 and PE64 respectively
- virtual uint32_t get_stack_size_reserve_32() const;
- virtual uint64_t get_stack_size_reserve_64() const;
-
- //Returns virtual size of image
- virtual uint32_t get_size_of_image() const;
-
- //Returns number of RVA and sizes (number of DATA_DIRECTORY entries)
- virtual uint32_t get_number_of_rvas_and_sizes() const;
- //Sets number of RVA and sizes (number of DATA_DIRECTORY entries)
- virtual void set_number_of_rvas_and_sizes(uint32_t number);
-
- //Returns PE characteristics
- virtual uint16_t get_characteristics() const;
- //Sets PE characteristics
- virtual void set_characteristics(uint16_t ch);
-
- //Returns size of headers
- virtual uint32_t get_size_of_headers() const;
-
- //Returns subsystem
- virtual uint16_t get_subsystem() const;
-
- //Sets subsystem
- virtual void set_subsystem(uint16_t subsystem);
-
- //Returns size of optional header
- virtual uint16_t get_size_of_optional_header() const;
-
- //Returns PE signature
- virtual uint32_t get_pe_signature() const;
-
- //Returns PE magic value
- virtual uint32_t get_magic() const;
-
- //Returns checksum of PE file from header
- virtual uint32_t get_checksum() const;
-
- //Sets checksum of PE file
- virtual void set_checksum(uint32_t checksum);
-
- //Returns timestamp of PE file from header
- virtual uint32_t get_time_date_stamp() const;
-
- //Sets timestamp of PE file
- virtual void set_time_date_stamp(uint32_t timestamp);
-
- //Returns Machine field value of PE file from header
- virtual uint16_t get_machine() const;
-
- //Sets Machine field value of PE file
- virtual void set_machine(uint16_t machine);
-
- //Returns DLL Characteristics
- virtual uint16_t get_dll_characteristics() const;
-
- //Sets DLL Characteristics
- virtual void set_dll_characteristics(uint16_t characteristics);
-
- //Sets required operation system version
- virtual void set_os_version(uint16_t major, uint16_t minor);
-
- //Returns required operation system version (minor word)
- virtual uint16_t get_minor_os_version() const;
-
- //Returns required operation system version (major word)
- virtual uint16_t get_major_os_version() const;
-
- //Sets required subsystem version
- virtual void set_subsystem_version(uint16_t major, uint16_t minor);
-
- //Returns required subsystem version (minor word)
- virtual uint16_t get_minor_subsystem_version() const;
-
- //Returns required subsystem version (major word)
- virtual uint16_t get_major_subsystem_version() const;
-
-public: //ADDRESS CONVERTIONS
- //Virtual Address (VA) to Relative Virtual Address (RVA) convertions
- //for PE32 and PE64 respectively
- //bound_check checks integer overflow
- virtual uint32_t va_to_rva(uint32_t va, bool bound_check = true) const;
- virtual uint32_t va_to_rva(uint64_t va, bool bound_check = true) const;
-
- //Relative Virtual Address (RVA) to Virtual Address (VA) convertions
- //for PE32 and PE64 respectively
- virtual uint32_t rva_to_va_32(uint32_t rva) const;
- virtual uint64_t rva_to_va_64(uint32_t rva) const;
-
-
-public: //SECTIONS
- //Returns number of sections
- virtual uint16_t get_number_of_sections() const;
-
-protected:
- typename PEClassType::NtHeaders nt_headers_; //NT headers (PE32 or PE64)
-
-public:
- //Sets number of sections
- virtual void set_number_of_sections(uint16_t number);
- //Sets virtual size of image
- virtual void set_size_of_image(uint32_t size);
- //Sets size of headers
- virtual void set_size_of_headers(uint32_t size);
- //Sets size of optional headers
- virtual void set_size_of_optional_header(uint16_t size);
- //Returns nt headers data pointer
- virtual char* get_nt_headers_ptr();
- //Returns nt headers data pointer
- virtual const char* get_nt_headers_ptr() const;
- //Returns size of NT header
- virtual uint32_t get_sizeof_nt_header() const;
- //Returns size of optional headers
- virtual uint32_t get_sizeof_opt_headers() const;
- //Sets file alignment (no checks)
- virtual void set_file_alignment_unchecked(uint32_t alignment);
- //Sets base of code
- virtual void set_base_of_code(uint32_t base);
- //Returns base of code
- virtual uint32_t get_base_of_code() const;
- //Returns needed PE magic for PE or PE+ (from template parameters)
- virtual uint32_t get_needed_magic() const;
-};
-
-//Two used typedefs for PE32 (PE) and PE64 (PE+)
-typedef pe_types<pe_win::image_nt_headers32,
- pe_win::image_optional_header32,
- pe_win::image_nt_optional_hdr32_magic,
- uint32_t,
- pe_win::image_ordinal_flag32,
- pe_win::image_tls_directory32,
- pe_win::image_load_config_directory32> pe_types_class_32;
-
-typedef pe_types<pe_win::image_nt_headers64,
- pe_win::image_optional_header64,
- pe_win::image_nt_optional_hdr64_magic,
- uint64_t,
- pe_win::image_ordinal_flag64,
- pe_win::image_tls_directory64,
- pe_win::image_load_config_directory64> pe_types_class_64;
-
-typedef pe_properties_generic<pe_types_class_32> pe_properties_32;
-typedef pe_properties_generic<pe_types_class_64> pe_properties_64;
-}