Package ghidra.app.util.bin.format.omf
Class OmfFileHeader
- java.lang.Object
-
- ghidra.app.util.bin.format.omf.OmfRecord
-
- ghidra.app.util.bin.format.omf.OmfFileHeader
-
public class OmfFileHeader extends OmfRecord
-
-
Constructor Summary
Constructors Constructor Description OmfFileHeader(BinaryReader reader)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static boolean
checkMagicNumber(BinaryReader reader)
Check that the file has the specific OMF magic numberstatic BinaryReader
createReader(ByteProvider provider)
Create a reader for a specific OMF filestatic void
doLinking(long startAddress, java.util.ArrayList<OmfSegmentHeader> segments, java.util.ArrayList<OmfGroupRecord> groups)
Assign a load image address to each segment.java.util.ArrayList<OmfExternalSymbol>
getExternalSymbols()
java.util.ArrayList<OmfSegmentHeader>
getExtraSegments()
java.util.ArrayList<OmfFixupRecord>
getFixups()
java.util.ArrayList<OmfGroupRecord>
getGroups()
java.lang.String
getLibraryModuleName()
The name of the object module (within a library)java.lang.String
getMachineName()
java.lang.String
getName()
This is usually the original source filenamejava.util.ArrayList<OmfSymbolRecord>
getPublicSymbols()
java.util.ArrayList<OmfSegmentHeader>
getSegments()
java.lang.String
getTranslator()
If the OMF file contains a "translator" record, this is usually a string indicating the compiler which produced the file.boolean
isLittleEndian()
static OmfFileHeader
parse(BinaryReader reader, TaskMonitor monitor)
Parse the entire object filevoid
resolveNames()
Resolve special names associated with each segment: segment, class, overlay names and group: group name For each segment, the read/write/execute permissions are also determinedOmfSegmentHeader
resolveSegment(int index)
Given an index, retrieve the specific segment it refers to.static OmfFileHeader
scan(BinaryReader reader, TaskMonitor monitor, boolean initialCommentsOnly)
Scan the object file, for the main header and comment records.void
sortSegmentDataBlocks()
Sort the explicit data-blocks for each segment into address order.-
Methods inherited from class ghidra.app.util.bin.format.omf.OmfRecord
calcCheckSum, getRecordLength, getRecordType, hasBigFields, readCheckSumByte, readIndex, readInt1Or2, readInt2Or4, readRecord, readRecordHeader, readString, validCheckSum
-
-
-
-
Constructor Detail
-
OmfFileHeader
public OmfFileHeader(BinaryReader reader) throws java.io.IOException
- Throws:
java.io.IOException
-
-
Method Detail
-
getName
public java.lang.String getName()
This is usually the original source filename- Returns:
- the name
-
getLibraryModuleName
public java.lang.String getLibraryModuleName()
The name of the object module (within a library)- Returns:
- the name
-
getMachineName
public java.lang.String getMachineName()
- Returns:
- the string identifying the architecture this object was compiled for
-
getTranslator
public java.lang.String getTranslator()
If the OMF file contains a "translator" record, this is usually a string indicating the compiler which produced the file.- Returns:
- the translator for this file
-
isLittleEndian
public boolean isLittleEndian()
- Returns:
- true if the file describes the load image for a little endian architecture
-
getSegments
public java.util.ArrayList<OmfSegmentHeader> getSegments()
- Returns:
- the list of segments in this file
-
getExtraSegments
public java.util.ArrayList<OmfSegmentHeader> getExtraSegments()
- Returns:
- the list of segments which are Borland extensions
-
getGroups
public java.util.ArrayList<OmfGroupRecord> getGroups()
- Returns:
- the list of group records for this file
-
getExternalSymbols
public java.util.ArrayList<OmfExternalSymbol> getExternalSymbols()
- Returns:
- the list of symbols that are external to this file
-
getPublicSymbols
public java.util.ArrayList<OmfSymbolRecord> getPublicSymbols()
- Returns:
- the list of symbols exported by this file
-
getFixups
public java.util.ArrayList<OmfFixupRecord> getFixups()
- Returns:
- the list of relocation records for this file
-
sortSegmentDataBlocks
public void sortSegmentDataBlocks()
Sort the explicit data-blocks for each segment into address order.
-
resolveSegment
public OmfSegmentHeader resolveSegment(int index) throws OmfException
Given an index, retrieve the specific segment it refers to. This incorporates the special Borland segments, where the index has the bit 0x4000 set.- Parameters:
index
- identifies the segment- Returns:
- the corresponding OmfSegmentHeader
- Throws:
OmfException
- if the index is malformed
-
resolveNames
public void resolveNames() throws OmfException
Resolve special names associated with each segment: segment, class, overlay names and group: group name For each segment, the read/write/execute permissions are also determined- Throws:
OmfException
- if any name indices are malformed
-
scan
public static OmfFileHeader scan(BinaryReader reader, TaskMonitor monitor, boolean initialCommentsOnly) throws java.io.IOException, OmfException
Scan the object file, for the main header and comment records. Other records are parsed but not saved- Parameters:
reader
- is the byte streammonitor
- is checked for cancellationinitialCommentsOnly
- is true if we only want to scan the header and the initial comments,- Returns:
- the header record
- Throws:
java.io.IOException
- for problems reading program dataOmfException
- for malformed records
-
parse
public static OmfFileHeader parse(BinaryReader reader, TaskMonitor monitor) throws java.io.IOException, OmfException
Parse the entire object file- Parameters:
reader
- is the byte streammonitor
- is checked for cancel button- Returns:
- the header record as root of object
- Throws:
java.io.IOException
- for problems reading dataOmfException
- for malformed records
-
doLinking
public static void doLinking(long startAddress, java.util.ArrayList<OmfSegmentHeader> segments, java.util.ArrayList<OmfGroupRecord> groups) throws OmfException
Assign a load image address to each segment. Follow OMF rules for grouping and ordering the segments in memory.- Parameters:
startAddress
- is the base memory address for the load imagesegments
- is the list of segmentsgroups
- is the list of specific segments that are grouped together in memory- Throws:
OmfException
- for malformed index/alignment/combining fields
-
checkMagicNumber
public static boolean checkMagicNumber(BinaryReader reader) throws java.io.IOException
Check that the file has the specific OMF magic number- Parameters:
reader
- accesses the bytes of the file- Returns:
- true if the magic number matches
- Throws:
java.io.IOException
- for problems reading bytes
-
createReader
public static BinaryReader createReader(ByteProvider provider)
Create a reader for a specific OMF file- Parameters:
provider
- is the underlying ByteProvider- Returns:
- the new reader
-
-