mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
GP-5532: Fixed an issue in the Mach-O loader that prevented
uninitialized segments from being mapped into memory (Closes #7949)
This commit is contained in:
parent
1a80aff30a
commit
9f12dbebf1
1 changed files with 15 additions and 9 deletions
|
@ -226,8 +226,12 @@ public class MachoProgramBuilder {
|
||||||
for (SegmentCommand segment : segments) {
|
for (SegmentCommand segment : segments) {
|
||||||
monitor.increment();
|
monitor.increment();
|
||||||
|
|
||||||
if (segment.getFileSize() > 0 && segment.getVMsize() > 0 &&
|
if (segment.getSegmentName().equals(SegmentNames.SEG_PAGEZERO)) {
|
||||||
(allowZeroAddr || segment.getVMaddress() != 0)) {
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (segment.getVMsize() > 0 && (allowZeroAddr || segment.getVMaddress() != 0)) {
|
||||||
|
if (segment.getFileSize() > 0) {
|
||||||
if (createMemoryBlock(segment.getSegmentName(),
|
if (createMemoryBlock(segment.getSegmentName(),
|
||||||
space.getAddress(segment.getVMaddress()), segment.getFileOffset(),
|
space.getAddress(segment.getVMaddress()), segment.getFileOffset(),
|
||||||
segment.getFileSize(), segment.getSegmentName(), source, segment.isRead(),
|
segment.getFileSize(), segment.getSegmentName(), source, segment.isRead(),
|
||||||
|
@ -235,6 +239,7 @@ public class MachoProgramBuilder {
|
||||||
log.appendMsg(String.format("Failed to create block: %s 0x%x 0x%x",
|
log.appendMsg(String.format("Failed to create block: %s 0x%x 0x%x",
|
||||||
segment.getSegmentName(), segment.getVMaddress(), segment.getVMsize()));
|
segment.getSegmentName(), segment.getVMaddress(), segment.getVMsize()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (segment.getVMsize() > segment.getFileSize()) {
|
if (segment.getVMsize() > segment.getFileSize()) {
|
||||||
// Pad the remaining address range with uninitialized data
|
// Pad the remaining address range with uninitialized data
|
||||||
if (createMemoryBlock(segment.getSegmentName(),
|
if (createMemoryBlock(segment.getSegmentName(),
|
||||||
|
@ -274,7 +279,8 @@ public class MachoProgramBuilder {
|
||||||
AddressSpace sectionSpace = overlaySections.contains(section)
|
AddressSpace sectionSpace = overlaySections.contains(section)
|
||||||
? segmentOverlayMap.get(section.getSegmentName())
|
? segmentOverlayMap.get(section.getSegmentName())
|
||||||
: space;
|
: space;
|
||||||
if (section.getSize() > 0 && section.getOffset() > 0 &&
|
if (section.getSize() > 0 &&
|
||||||
|
(section.getOffset() > 0 || section.getType() == SectionTypes.S_ZEROFILL) &&
|
||||||
(allowZeroAddr || section.getAddress() != 0)) {
|
(allowZeroAddr || section.getAddress() != 0)) {
|
||||||
if (createMemoryBlock(section.getSectionName(),
|
if (createMemoryBlock(section.getSectionName(),
|
||||||
sectionSpace.getAddress(section.getAddress()), section.getOffset(),
|
sectionSpace.getAddress(section.getAddress()), section.getOffset(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue