|
bool | IsExtendedFormat () const |
|
| LEFormat (unsigned system, unsigned module_flags, bool extended_format) |
|
bool | IsLibrary () const |
|
bool | IsDriver () const |
|
bool | IsOS2 () const |
|
void | ReadFile (Linker::Reader &rd) override |
| Loads file into memory.
|
|
offset_t | ImageSize () const override |
| Retrieves size of stored data.
|
|
offset_t | WriteFile (Linker::Writer &wr) const override |
| Stores data in memory to file.
|
|
void | Dump (Dumper::Dumper &dump) const override |
| Display file contents in a nice manner.
|
|
offset_t | GetPageOffset (uint32_t index) const |
|
offset_t | GetPageSize (uint32_t index) const |
|
std::shared_ptr< LEFormat > | SimulateLinker (compatibility_type compatibility) |
|
bool | FormatSupportsSegmentation () const override |
| Whether the format supports multiple segments.
|
|
bool | FormatSupportsLibraries () const override |
| Whether the format supports libraries.
|
|
unsigned | FormatAdditionalSectionFlags (std::string section_name) const override |
|
Resource & | AddResource (Resource &resource) |
|
void | GetRelocationOffset (Object &object, size_t offset, size_t &page_index, uint16_t &page_offset) |
|
void | AddRelocation (Object &object, unsigned type, unsigned flags, size_t offset, uint16_t module, uint32_t target=0, uint32_t addition=0) |
|
unsigned | GetDefaultObjectFlags () const |
|
void | AddObject (const Object &object) |
|
uint16_t | FetchImportedModuleName (std::string name) |
|
uint16_t | FetchImportedProcedureName (std::string name) |
|
uint16_t | MakeEntry (Linker::Position value) |
|
uint16_t | MakeEntry (uint16_t index, Linker::Position value) |
|
uint8_t | CountBundles (size_t entry_index) const |
|
std::vector< Linker::OptionDescription< void > * > | GetLinkerScriptParameterNames () override |
| Returns a list of the parameters used in the linker scripts, used for documentation.
|
|
std::shared_ptr< Linker::OptionCollector > | GetOptions () override |
| Returns object containing a sequence of option fields provided with the -S command line flag.
|
|
void | SetOptions (std::map< std::string, std::string > &options) override |
| Passes command line parameters as settings over to format object.
|
|
void | OnNewSegment (std::shared_ptr< Linker::Segment > segment) override |
| Callback function when allocating a new segment When the linker script runs, it creates segments consecutively. Overriding this method permits the output format to handle the allocated segment.
|
|
std::unique_ptr< Script::List > | GetScript (Linker::Module &module) |
|
void | Link (Linker::Module &module) |
|
void | ProcessModule (Linker::Module &module) override |
| Processes the module object and initializes format fields.
|
|
void | CalculateValues () override |
| Intermediate step between processing module and generating output file to set up headers and management sections It is expected that after a module is processed, additional steps are required to evaluate the final values of the fields.
|
|
void | GenerateFile (std::string filename, Linker::Module &module) override |
| The main function that handles processing, calculating and generating the final image.
|
|
std::string | GetDefaultExtension (Linker::Module &module, std::string filename) const override |
| Appends a default extension to the filename.
|
|
void | ClearSegmentManager () |
|
void | SetLinkScript (std::string script_file, std::map< std::string, std::string > &options) override |
| Sets up the linker script and linker parameters.
|
|
std::unique_ptr< Script::List > | GetScript (Module &module) |
| Compiles the linker script into an internal format.
|
|
offset_t | GetCurrentAddress () const |
| Retrieves current address pointer.
|
|
void | SetCurrentAddress (offset_t address) |
| Moves the current address pointer further, and if the current segment already contains data, fill it up to the point.
|
|
void | AlignCurrentAddress (offset_t align) |
| Aligns current address to alignment, using SetCurrentAddress.
|
|
void | SetLatestBase (offset_t address) |
| Sets the base of the current section (the value from which offsets are counted from)
|
|
void | FinishCurrentSegment () |
| Closes the current segment, sets current_segment to null.
|
|
std::shared_ptr< Segment > | AppendSegment (std::string name) |
| Terminates the current segment (if there is one), creates a new segment and attaches it to the image.
|
|
std::shared_ptr< Segment > | FetchSegment (std::string name) |
| Attempts to fetch a segment, returns null if not found.
|
|
void | AppendSection (std::shared_ptr< Section > section) |
| Adds a new section to the current segment, sets the base to the same as the segment.
|
|
void | ProcessScript (std::unique_ptr< Script::List > &directives, Module &module) |
| Executes a parsed linker script on a module and collects segments The function OnNewSegment can be defined to handle each newly allocated segment.
|
|
void | ProcessAction (std::unique_ptr< Script::Node > &action, Module &module) |
|
void | PostProcessAction (std::unique_ptr< Script::Node > &action, Module &module) |
|
void | ProcessCommand (std::unique_ptr< Script::Node > &command, Module &module) |
|
bool | CheckPredicate (std::unique_ptr< Script::Node > &predicate, std::shared_ptr< Section > section, Module &module) |
|
offset_t | EvaluateExpression (std::unique_ptr< Script::Node > &expression, Module &module) |
|
virtual bool | AddSupplementaryOutputFormat (std::string subformat) |
| If the output format actually drives multiple output formats (resource file, apple double, etc.), specify multiple types, return false if unknown.
|
|
virtual std::vector< OptionDescription< void > > | GetMemoryModelNames () |
| Returns a list of the supported memory models, used for documentation.
|
|
virtual std::vector< OptionDescription< void > > | GetSpecialSymbolNames () |
| Returns a list of special symbol names recognized by the format, used for documentation.
|
|
std::optional< std::string > | FetchOption (std::map< std::string, std::string > &options, std::string name) |
| Convenience method to look up option by name.
|
|
std::string | FetchOption (std::map< std::string, std::string > &options, std::string name, std::string default_value) |
| Convenience method to look up option by name, returning default value if name is missing.
|
|
std::optional< offset_t > | FetchIntegerOption (std::map< std::string, std::string > &options, std::string name) |
| Convenience method to look up option by name and convert it to integer.
|
|
virtual void | SetModel (std::string model) |
| Sets the way memory is organized, typically modifying a built-in script.
|
|
virtual std::string | GetDefaultExtension (Module &module) const |
| Provides a default filename for the output file.
|
|
virtual bool | FormatIs16bit () const |
| Whether the format is 16-bit or not.
|
|
virtual bool | FormatIsProtectedMode () const |
| Whether the format is in protected mode or not (x86 only)
|
|
virtual bool | FormatIsLinear () const |
| Whether the address space is linear or segmented.
|
|
virtual bool | FormatSupportsResources () const |
| Whether the format supports resources.
|
|
| Format (offset_t file_offset=0) |
|
virtual void | Clear () |
| Resets all fields to their default values, deallocate memory.
|
|
offset_t | WriteFile (Writer &wr, offset_t count, offset_t offset=0) const override |
| Writes data of non-zero filled sections.
|
|
virtual std::shared_ptr< const ActualImage > | AsImage () const |
| Retrieves a randomly accessible image.
|
|
std::shared_ptr< ActualImage > | AsImage () |
| Retrieves a randomly accessible image.
|
|
|
::EndianType | endiantype = ::LittleEndian |
|
std::array< char, 2 > | signature {'L', 'E'} |
| The signature, almost always "LE" or "LX".
|
|
uint32_t | format_level = 0 |
|
cpu_type | cpu = I386 |
|
system_type | system = system_type(0) |
|
uint32_t | module_version = 0 |
|
uint32_t | module_flags = 0 |
|
uint32_t | page_count = 0 |
|
uint32_t | page_size = 0x1000 |
|
uint32_t | eip_object = 0 |
|
uint32_t | eip_value = 0 |
|
uint32_t | esp_object = 0 |
|
uint32_t | esp_value = 0 |
|
union { | |
|
uint32_t last_page_size | |
|
uint32_t page_offset_shift | |
|
}; | | |
|
uint32_t | fixup_section_size = 0 |
|
uint32_t | fixup_section_checksum = 0 |
|
uint32_t | loader_section_size = 0 |
|
uint32_t | loader_section_checksum = 0 |
|
uint32_t | object_table_offset = 0 |
|
uint32_t | object_page_table_offset = 0 |
|
uint32_t | object_iterated_pages_offset = 0 |
|
uint32_t | resource_table_offset = 0 |
|
uint32_t | resource_table_entry_count = 0 |
|
uint32_t | resident_name_table_offset = 0 |
|
uint32_t | entry_table_offset = 0 |
|
uint32_t | module_directives_offset = 0 |
|
uint32_t | fixup_page_table_offset = 0 |
|
uint32_t | fixup_record_table_offset = 0 |
|
uint32_t | imported_module_table_offset = 0 |
|
uint32_t | imported_procedure_table_offset = 0 |
|
uint32_t | per_page_checksum_offset = 0 |
|
uint32_t | data_pages_offset = 0 |
|
uint32_t | preload_page_count = 0 |
|
uint32_t | nonresident_name_table_offset = 0 |
|
uint32_t | nonresident_name_table_size = 0 |
|
uint32_t | nonresident_name_table_checksum = 0 |
|
uint32_t | automatic_data = 0 |
|
uint32_t | debug_info_offset = 0 |
|
uint32_t | debug_info_size = 0 |
|
uint32_t | instance_preload_page_count = 0 |
|
uint32_t | instance_demand_page_count = 0 |
|
uint32_t | stack_size = 0 |
|
uint32_t | heap_size = 0 |
|
uint32_t | vxd_version_info_resource_offset = 0 |
|
uint32_t | vxd_version_info_resource_length = 0 |
|
uint16_t | vxd_device_id = 0 |
|
uint16_t | vxd_ddk_version = 0 |
|
std::vector< Object > | objects |
|
std::vector< ModuleDirective > | module_directives |
|
std::vector< Page > | pages |
|
std::map< uint16_t, std::map< uint16_t, Resource > > | resources |
|
std::vector< Name > | resident_names |
|
std::vector< Name > | nonresident_names |
|
std::vector< Entry > | entries |
|
std::vector< std::string > | imported_modules |
|
std::vector< std::string > | imported_procedures |
|
offset_t | file_size = offset_t(-1) |
|
MZStubWriter | stub |
|
compatibility_type | compatibility = CompatibleNone |
|
std::string | program_name |
|
std::string | module_name |
|
std::shared_ptr< Linker::Segment > | stack |
|
std::shared_ptr< Linker::Segment > | heap |
|
std::map< std::shared_ptr< Linker::Segment >, size_t > | object_index |
|
std::map< std::string, uint32_t > | imported_procedure_name_offsets |
|
offset_t | imported_procedure_names_length = 0 |
|
offset_t | current_base = 0 |
| The base address of the current section.
|
|
std::vector< std::shared_ptr< Segment > > | segment_vector |
| Ordered sequence of segments.
|
|
std::map< std::string, std::shared_ptr< Segment > > | segment_map |
| Map of segments from their names.
|
|
std::shared_ptr< Segment > | current_segment |
| Currently processed segment.
|
|
std::map< std::string, Location > | linker_parameters |
| Parameters that permit customizing the linker script.
|
|
std::string | linker_script |
| Contents of the linker script.
|
|
offset_t | file_offset |
|
LE/LX .EXE linear executable file format.
Introduced first for 32-bit virtual device drivers for 16-bit versions of Windows, it was adopted and extended for 32-bit versions of OS/2 as well as a few DOS extenders. It has two main variants, the LE and the LX executable formats.
The following platforms are supported:
- Windows/386 device drivers, LE format (not tested or fully supported)
- LE executables for the DOS/4G DOS extender
- LX executables for 32-bit versions of OS/2