/* Copyright 2017 R. Thomas * Copyright 2017 Quarkslab * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "pyPE.hpp" #include "LIEF/visitors/Hash.hpp" #include "LIEF/PE/OptionalHeader.hpp" #include #include template using getter_t = T (OptionalHeader::*)(void) const; template using setter_t = void (OptionalHeader::*)(T); void init_PE_OptionalHeader_class(py::module& m) { py::class_(m, "OptionalHeader") .def(py::init<>()) .def_property("magic", static_cast>(&OptionalHeader::magic), static_cast>(&OptionalHeader::magic)) .def_property("major_linker_version", static_cast>(&OptionalHeader::major_linker_version), static_cast>(&OptionalHeader::major_linker_version)) .def_property("minor_linker_version", static_cast>(&OptionalHeader::minor_linker_version), static_cast>(&OptionalHeader::minor_linker_version)) .def_property("sizeof_code", static_cast>(&OptionalHeader::sizeof_code), static_cast>(&OptionalHeader::sizeof_code)) .def_property("sizeof_initialized_data", static_cast>(&OptionalHeader::sizeof_initialized_data), static_cast>(&OptionalHeader::sizeof_initialized_data)) .def_property("sizeof_uninitialized_data", static_cast>(&OptionalHeader::sizeof_uninitialized_data), static_cast>(&OptionalHeader::sizeof_uninitialized_data)) .def_property("addressof_entrypoint", static_cast>(&OptionalHeader::addressof_entrypoint), static_cast>(&OptionalHeader::addressof_entrypoint)) .def_property("baseof_code", static_cast>(&OptionalHeader::baseof_code), static_cast>(&OptionalHeader::baseof_code)) .def_property("baseof_data", static_cast>(&OptionalHeader::baseof_data), static_cast>(&OptionalHeader::baseof_data)) .def_property("imagebase", static_cast>(&OptionalHeader::imagebase), static_cast>(&OptionalHeader::imagebase)) .def_property("section_alignment", static_cast>(&OptionalHeader::section_alignment), static_cast>(&OptionalHeader::section_alignment)) .def_property("file_alignment", static_cast>(&OptionalHeader::file_alignment), static_cast>(&OptionalHeader::file_alignment)) .def_property("major_operating_system_version", static_cast>(&OptionalHeader::major_operating_system_version), static_cast>(&OptionalHeader::major_operating_system_version)) .def_property("minor_operating_system_version", static_cast>(&OptionalHeader::minor_operating_system_version), static_cast>(&OptionalHeader::minor_operating_system_version)) .def_property("major_image_version", static_cast>(&OptionalHeader::major_image_version), static_cast>(&OptionalHeader::major_image_version)) .def_property("minor_image_version", static_cast>(&OptionalHeader::minor_image_version), static_cast>(&OptionalHeader::minor_image_version)) .def_property("major_subsystem_version", static_cast>(&OptionalHeader::major_subsystem_version), static_cast>(&OptionalHeader::major_subsystem_version)) .def_property("minor_subsystem_version", static_cast>(&OptionalHeader::minor_subsystem_version), static_cast>(&OptionalHeader::minor_subsystem_version)) .def_property("win32_version_value", static_cast>(&OptionalHeader::win32_version_value), static_cast>(&OptionalHeader::win32_version_value)) .def_property("sizeof_image", static_cast>(&OptionalHeader::sizeof_image), static_cast>(&OptionalHeader::sizeof_image)) .def_property("sizeof_headers", static_cast>(&OptionalHeader::sizeof_headers), static_cast>(&OptionalHeader::sizeof_headers)) .def_property("checksum", static_cast>(&OptionalHeader::checksum), static_cast>(&OptionalHeader::checksum)) .def_property("subsystem", static_cast>(&OptionalHeader::subsystem), static_cast>(&OptionalHeader::subsystem)) .def_property("dll_characteristics", static_cast>(&OptionalHeader::dll_characteristics), static_cast>(&OptionalHeader::dll_characteristics)) .def_property_readonly("dll_characteristics_lists", &OptionalHeader::dll_characteristics_list) .def("has_dll_characteristics", &OptionalHeader::has_dll_characteristics) .def_property("sizeof_stack_reserve", static_cast>(&OptionalHeader::sizeof_stack_reserve), static_cast>(&OptionalHeader::sizeof_stack_reserve)) .def_property("sizeof_stack_commit", static_cast>(&OptionalHeader::sizeof_stack_commit), static_cast>(&OptionalHeader::sizeof_stack_commit)) .def_property("sizeof_heap_reserve", static_cast>(&OptionalHeader::sizeof_heap_reserve), static_cast>(&OptionalHeader::sizeof_heap_reserve)) .def_property("sizeof_heap_commit", static_cast>(&OptionalHeader::sizeof_heap_commit), static_cast>(&OptionalHeader::sizeof_heap_commit)) .def_property("loader_flags", static_cast>(&OptionalHeader::loader_flags), static_cast>(&OptionalHeader::loader_flags)) .def_property("numberof_rva_and_size", static_cast>(&OptionalHeader::numberof_rva_and_size), static_cast>(&OptionalHeader::numberof_rva_and_size)) .def("__eq__", &OptionalHeader::operator==) .def("__ne__", &OptionalHeader::operator!=) .def("__hash__", [] (const OptionalHeader& optional_header) { return LIEF::Hash::hash(optional_header); }) .def("__str__", [] (const OptionalHeader& header) { std::ostringstream stream; stream << header; std::string str = stream.str(); return str; }); }