Package ghidra.app.util.opinion
Class MachoProgramBuilder
java.lang.Object
ghidra.app.util.opinion.MachoProgramBuilder
- Direct Known Subclasses:
DyldCacheProgramBuilder
,MachoPrelinkProgramBuilder
Builds up a Mach-O
Program
by parsing the Mach-O headers.-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
protected FileBytes
protected Listing
protected MessageLog
protected MachHeader
protected Memory
protected TaskMonitor
protected Program
protected ByteProvider
protected BinaryReader
protected AddressSpace
-
Constructor Summary
ModifierConstructorDescriptionprotected
MachoProgramBuilder
(Program program, ByteProvider provider, FileBytes fileBytes, MessageLog log, TaskMonitor monitor) Creates a newMachoProgramBuilder
based on the given information. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
build()
static void
buildProgram
(Program program, ByteProvider provider, FileBytes fileBytes, MessageLog log, TaskMonitor monitor) Builds up a Mach-OProgram
.protected Namespace
createNamespace
(String namespaceName) static void
fixupExternalLibrary
(Program program, List<String> libraryPaths, int libraryOrdinal, Symbol symbol) protected void
fixupProgramTree
(String suffix) Fixes up the Program Tree to better visualize the memory blocks that were split into sectionsprotected Address
Gets the base address of this Mach-O.protected void
protected void
markupChainedFixups
(MachHeader header, List<Address> chainedFixups) Markup the givenList
of chained fixups by creating pointers at their locations, if possibleprotected void
markupHeaders
(MachHeader header, Address headerAddr) protected void
markupLoadCommandData
(MachHeader header, String source) Marks upLoadCommand
dadtaprotected void
See crt.c from opensource.apple.comprotected void
protected void
processChainedFixups
(List<String> libraryPaths) protected void
ProcessesLoadCommand
s that appear to be corrupt.protected void
processDyldInfo
(boolean doClassic, List<String> libraryPaths) protected void
Logs encrypted block rangesprotected void
Attempts to discover and set the entry point.protected boolean
processExports
(MachHeader header) protected void
Processes the external relocations from allDynamicSymbolTableCommand
s.protected void
Processes the local relocations from allDynamicSymbolTableCommand
s.protected void
processMemoryBlocks
(MachHeader header, String source, boolean processSections, boolean allowZeroAddr) Creates memory blocks for the given header.protected void
processNewExport
(Address baseAddr, ExportTrie.ExportEntry export, String name) protected void
Processes the section relocations from allSection
s.protected void
protected void
processSymbolTables
(MachHeader header, boolean processExports) protected void
protected void
ProcessesLoadCommand
s that we haven't implemented yet.protected void
protected void
protected void
protected void
Sets theProgram
image baseprotected void
protected Address
setupHeaderAddr
(Collection<SegmentCommand> segments) Sets up theMachHeader
in memory and returns its address.
-
Field Details
-
BLOCK_SOURCE_NAME
- See Also:
-
machoHeader
-
program
-
provider
-
fileBytes
-
log
-
monitor
-
memory
-
listing
-
space
-
reader
-
-
Constructor Details
-
MachoProgramBuilder
protected MachoProgramBuilder(Program program, ByteProvider provider, FileBytes fileBytes, MessageLog log, TaskMonitor monitor) Creates a newMachoProgramBuilder
based on the given information.- Parameters:
program
- TheProgram
to build up.provider
- TheByteProvider
that contains the Mach-O's bytes.fileBytes
- Where the Mach-O's bytes came from.log
- The log.monitor
- A cancelable task monitor.
-
-
Method Details
-
buildProgram
public static void buildProgram(Program program, ByteProvider provider, FileBytes fileBytes, MessageLog log, TaskMonitor monitor) throws Exception Builds up a Mach-OProgram
.- Parameters:
program
- TheProgram
to build up.provider
- TheByteProvider
that contains the Mach-O's bytes.fileBytes
- Where the Mach-O's bytes came from.log
- The log.monitor
- A cancelable task monitor.- Throws:
Exception
- if a problem occurs.
-
build
- Throws:
Exception
-
setProgramImageBase
Sets theProgram
image base -
getMachoBaseAddress
Gets the base address of this Mach-O. This is the address of the start of the Mach-O, not necessary theProgram
image base.- Returns:
- The base address of this Mach-O
-
processMemoryBlocks
protected void processMemoryBlocks(MachHeader header, String source, boolean processSections, boolean allowZeroAddr) throws Exception Creates memory blocks for the given header.- Parameters:
header
- The Mach-O header to process for memory block creation.source
- A name that represents where the memory blocks came from.processSections
- True to split segments into their sections.allowZeroAddr
- True if memory blocks at address 0 should be processed; otherwise, false.- Throws:
Exception
- If there was a problem processing the memory blocks.
-
fixupProgramTree
Fixes up the Program Tree to better visualize the memory blocks that were split into sections- Parameters:
suffix
- An optional suffix that will get appended to tree segment and segment nodes- Throws:
Exception
- if there was a problem fixing up the Program Tree
-
processEntryPoint
Attempts to discover and set the entry point.A program may declare multiple entry points to, for example, confuse static analysis tools. We will sort the discovered entry points by priorities assigned to each type of load command, and only use the one with the highest priority.
- Throws:
Exception
- If there was a problem discovering or setting the entry point.
-
processExports
- Throws:
Exception
-
processNewExport
protected void processNewExport(Address baseAddr, ExportTrie.ExportEntry export, String name) throws AddressOutOfBoundsException, Exception - Throws:
AddressOutOfBoundsException
Exception
-
processSymbolTables
- Throws:
Exception
-
processStubs
- Throws:
Exception
-
processUndefinedSymbols
- Throws:
Exception
-
processAbsoluteSymbols
- Throws:
Exception
-
processChainedFixups
- Throws:
Exception
-
processDyldInfo
- Throws:
Exception
-
markupHeaders
- Throws:
Exception
-
setupHeaderAddr
protected Address setupHeaderAddr(Collection<SegmentCommand> segments) throws AddressOverflowException Sets up theMachHeader
in memory and returns its address. If the header was not intended to reside in memory (like for Mach-O object files), then this method will create an area in the "OTHER" address space for the header to live in.- Parameters:
segments
- ACollection
ofMach-O segments
- Returns:
- The
Address
ofMachHeader
in memory - Throws:
AddressOverflowException
- if the address lies outside the address space
-
markupSections
- Throws:
Exception
-
processSectionRelocations
Processes the section relocations from allSection
s.- Throws:
CancelledException
- if the operation was cancelled.
-
processExternalRelocations
Processes the external relocations from allDynamicSymbolTableCommand
s.- Throws:
CancelledException
- if the operation was cancelled.
-
processLocalRelocations
Processes the local relocations from allDynamicSymbolTableCommand
s.- Throws:
CancelledException
- if the operation was cancelled.
-
processLibraries
- Throws:
Exception
-
processEncryption
Logs encrypted block ranges- Throws:
Exception
- if there was a problem detecting the encrypted block ranges
-
processUnsupportedLoadCommands
ProcessesLoadCommand
s that we haven't implemented yet.- Throws:
CancelledException
- if the operation was cancelled.
-
processCorruptLoadCommands
ProcessesLoadCommand
s that appear to be corrupt.- Throws:
CancelledException
- if the operation was cancelled.
-
markupLoadCommandData
Marks upLoadCommand
dadta- Parameters:
header
- The Mach-O headersource
- A name that represents where the header came from (could be null)- Throws:
Exception
- If there was a problem performing the markup
-
createNamespace
-
markupChainedFixups
protected void markupChainedFixups(MachHeader header, List<Address> chainedFixups) throws CancelledException Markup the givenList
of chained fixups by creating pointers at their locations, if possible- Parameters:
header
- The Mach-O headerchainedFixups
- TheList
of chained fixups to markup- Throws:
CancelledException
- if the operation was cancelled
-
markupProgramVars
protected void markupProgramVars()See crt.c from opensource.apple.com -
setRelocatableProperty
protected void setRelocatableProperty() -
setProgramDescription
protected void setProgramDescription() -
markupAndSetGolangInitialProgramProperties
protected void markupAndSetGolangInitialProgramProperties() -
setCompiler
protected void setCompiler() -
renameObjMsgSendRtpSymbol
-
fixupExternalLibrary
-