mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
GP-0: Certify and cleanup
This commit is contained in:
parent
90a16f9963
commit
8701d22356
9 changed files with 53 additions and 99 deletions
|
@ -18,19 +18,24 @@ package ghidra.file.formats.omf51;
|
|||
import static ghidra.formats.gfilesystem.fileinfo.FileAttributeType.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import ghidra.app.util.bin.ByteProvider;
|
||||
import ghidra.app.util.bin.ByteProviderWrapper;
|
||||
import ghidra.app.util.bin.format.omf.OmfException;
|
||||
import ghidra.app.util.bin.format.omf.omf51.*;
|
||||
import ghidra.app.util.bin.format.omf.omf51.Omf51Library;
|
||||
import ghidra.app.util.bin.format.omf.omf51.Omf51RecordFactory;
|
||||
import ghidra.formats.gfilesystem.*;
|
||||
import ghidra.formats.gfilesystem.annotations.FileSystemInfo;
|
||||
import ghidra.formats.gfilesystem.fileinfo.FileAttributes;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
import ghidra.util.task.TaskMonitor;
|
||||
|
||||
@FileSystemInfo(type = "omf51", description = "OMF51 Library", factory = Omf51ArchiveFileSystemFactory.class)
|
||||
@FileSystemInfo(
|
||||
type = "omf51",
|
||||
description = "OMF51 Library",
|
||||
factory = Omf51ArchiveFileSystemFactory.class
|
||||
)
|
||||
public class Omf51ArchiveFileSystem extends AbstractFileSystem<Omf51Library.MemberHeader> {
|
||||
|
||||
private ByteProvider provider;
|
||||
|
@ -40,18 +45,15 @@ public class Omf51ArchiveFileSystem extends AbstractFileSystem<Omf51Library.Memb
|
|||
this.provider = provider;
|
||||
}
|
||||
|
||||
public void mount(TaskMonitor monitor) throws IOException, OmfException {
|
||||
Msg.debug(this, "Opening OMF51 library...");
|
||||
public void mount(TaskMonitor monitor) throws IOException, OmfException, CancelledException {
|
||||
monitor.setMessage("Opening OMF51 library...");
|
||||
Omf51RecordFactory factory = new Omf51RecordFactory(provider);
|
||||
Omf51Library library = new Omf51Library(factory);
|
||||
library.parseMembers();
|
||||
ArrayList<Omf51Library.MemberHeader> members = library.getMembers();
|
||||
|
||||
Msg.debug(this, "Found %d members".formatted(members.size()));
|
||||
List<Omf51Library.MemberHeader> members = new Omf51Library(factory).getMembers();
|
||||
|
||||
monitor.initialize(members.size(), "Opening OMF51 library...");
|
||||
for (Omf51Library.MemberHeader member : members) {
|
||||
Msg.debug(this, member.name);
|
||||
fsIndex.storeFile(member.name, fsIndex.getFileCount(), false, member.size, member);
|
||||
monitor.increment();
|
||||
fsIndex.storeFile(member.name(), fsIndex.getFileCount(), false, member.size(), member);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,7 +76,7 @@ public class Omf51ArchiveFileSystem extends AbstractFileSystem<Omf51Library.Memb
|
|||
public ByteProvider getByteProvider(GFile file, TaskMonitor monitor) {
|
||||
Omf51Library.MemberHeader member = fsIndex.getMetadata(file);
|
||||
return (member != null)
|
||||
? new ByteProviderWrapper(provider, member.offset, member.size,
|
||||
? new ByteProviderWrapper(provider, member.offset(), member.size(),
|
||||
file.getFSRL())
|
||||
: null;
|
||||
}
|
||||
|
@ -85,8 +87,8 @@ public class Omf51ArchiveFileSystem extends AbstractFileSystem<Omf51Library.Memb
|
|||
|
||||
Omf51Library.MemberHeader entry = fsIndex.getMetadata(file);
|
||||
if (entry != null) {
|
||||
result.add(NAME_ATTR, entry.name);
|
||||
result.add(SIZE_ATTR, entry.size);
|
||||
result.add(NAME_ATTR, entry.name());
|
||||
result.add(SIZE_ATTR, entry.size());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -20,15 +20,13 @@ import java.io.IOException;
|
|||
import ghidra.app.util.bin.ByteProvider;
|
||||
import ghidra.app.util.bin.format.omf.AbstractOmfRecordFactory;
|
||||
import ghidra.app.util.bin.format.omf.OmfException;
|
||||
import ghidra.app.util.bin.format.omf.OmfRecord;
|
||||
import ghidra.app.util.bin.format.omf.omf51.Omf51LibraryHeaderRecord;
|
||||
import ghidra.app.util.bin.format.omf.omf51.Omf51RecordFactory;
|
||||
import ghidra.app.util.opinion.OmfLoader;
|
||||
import ghidra.app.util.opinion.Omf51Loader;
|
||||
import ghidra.formats.gfilesystem.FSRLRoot;
|
||||
import ghidra.formats.gfilesystem.FileSystemService;
|
||||
import ghidra.formats.gfilesystem.factory.GFileSystemFactoryByteProvider;
|
||||
import ghidra.formats.gfilesystem.factory.GFileSystemProbeByteProvider;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
import ghidra.util.task.TaskMonitor;
|
||||
|
||||
|
@ -54,19 +52,15 @@ public class Omf51ArchiveFileSystemFactory implements
|
|||
public boolean probe(ByteProvider byteProvider, FileSystemService fsService,
|
||||
TaskMonitor monitor) throws IOException, CancelledException {
|
||||
|
||||
if (byteProvider.length() < OmfLoader.MIN_BYTE_LENGTH) {
|
||||
if (byteProvider.length() < Omf51Loader.MIN_BYTE_LENGTH) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
AbstractOmfRecordFactory factory = new Omf51RecordFactory(byteProvider);
|
||||
OmfRecord record = factory.readNextRecord();
|
||||
return (record != null && record instanceof Omf51LibraryHeaderRecord);
|
||||
return factory.readNextRecord() instanceof Omf51LibraryHeaderRecord;
|
||||
}
|
||||
catch (OmfException e) {
|
||||
return false;
|
||||
}
|
||||
catch (IOException e) {
|
||||
catch (OmfException | IOException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue