mirror of
https://github.com/NationalSecurityAgency/ghidra
synced 2024-08-27 21:10:26 +00:00
all mzloader header shorts are now treated as uint
reverting bad code reverting bad code v2 reverting bad code v3
This commit is contained in:
parent
586fc9efcd
commit
a6cca75b9e
|
@ -139,7 +139,7 @@ public class MzLoader extends AbstractLibrarySupportLoader {
|
|||
MessageLog log, TaskMonitor monitor) {
|
||||
monitor.setMessage("Marking up headers...");
|
||||
OldDOSHeader header = mz.getHeader();
|
||||
int blockSize = paragraphsToBytes(header.e_cparhdr());
|
||||
int blockSize = paragraphsToBytes(Short.toUnsignedInt(header.e_cparhdr()));
|
||||
try {
|
||||
Address headerSpaceAddr = AddressSpace.OTHER_SPACE.getAddress(0);
|
||||
MemoryBlock headerBlock = MemoryBlockUtils.createInitializedBlock(program, true,
|
||||
|
@ -156,7 +156,7 @@ public class MzLoader extends AbstractLibrarySupportLoader {
|
|||
if (!relocations.isEmpty()) {
|
||||
DataType relocationType = relocations.get(0).toDataType();
|
||||
int len = relocationType.getLength();
|
||||
addr = addr.add(header.e_lfarlc());
|
||||
addr = addr.add(Short.toUnsignedInt(header.e_lfarlc()));
|
||||
for (int i = 0; i < relocations.size(); i++) {
|
||||
monitor.checkCancelled();
|
||||
DataUtilities.createData(program, addr.add(i * len), relocationType, -1,
|
||||
|
@ -187,7 +187,7 @@ public class MzLoader extends AbstractLibrarySupportLoader {
|
|||
knownSegments.add(space.getAddress((INITIAL_SEGMENT_VAL + header.e_cs()) & 0xffff, 0));
|
||||
}
|
||||
// Allocate an initialized memory block for each segment we know about
|
||||
int endOffset = pagesToBytes(header.e_cp() - 1) + header.e_cblp();
|
||||
int endOffset = pagesToBytes(Short.toUnsignedInt(header.e_cp()) - 1) + Short.toUnsignedInt(header.e_cblp());
|
||||
if (endOffset > reader.length()) {
|
||||
log.appendMsg(
|
||||
"File is 0x%x bytes but header reports 0x%x".formatted(reader.length(), endOffset));
|
||||
|
@ -253,7 +253,7 @@ public class MzLoader extends AbstractLibrarySupportLoader {
|
|||
|
||||
// Allocate an uninitialized memory block for extra minimum required data space
|
||||
if (lastBlock != null) {
|
||||
int extraAllocSize = paragraphsToBytes(header.e_minalloc());
|
||||
int extraAllocSize = paragraphsToBytes(Short.toUnsignedInt(header.e_minalloc()));
|
||||
if (extraAllocSize > 0) {
|
||||
MemoryBlockUtils.createUninitializedBlock(program, false, "DATA",
|
||||
lastBlock.getEnd().add(1), extraAllocSize, "", "mz", true, true, false, log);
|
||||
|
@ -475,7 +475,7 @@ public class MzLoader extends AbstractLibrarySupportLoader {
|
|||
* @return The segmented addresses converted to a file offset
|
||||
*/
|
||||
private int addressToFileOffset(int segment, int offset, OldDOSHeader header) {
|
||||
return (short) segment * 16 + offset + paragraphsToBytes(header.e_cparhdr());
|
||||
return (short) segment * 16 + offset + paragraphsToBytes(Short.toUnsignedInt(header.e_cparhdr()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue