mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-08-08 07:40:39 -09:00
GP-7120: Improved monitor messages during import
This commit is contained in:
@@ -281,7 +281,7 @@ public abstract class AbstractProgramLoader implements Loader {
|
||||
int id = prog.startTransaction("Set program properties");
|
||||
boolean success = false;
|
||||
try {
|
||||
setProgramProperties(prog, settings.provider(), getName());
|
||||
setProgramProperties(prog, settings.provider(), getName(), settings.monitor());
|
||||
try {
|
||||
if (shouldSetImageBase(prog, imageBase)) {
|
||||
prog.setImageBase(imageBase, true);
|
||||
@@ -327,17 +327,25 @@ public abstract class AbstractProgramLoader implements Loader {
|
||||
* @param prog {@link Program} (with active transaction)
|
||||
* @param provider {@link ByteProvider} that the program was created from
|
||||
* @param executableFormatName executable format string
|
||||
* @param monitor The {@link TaskMonitor}
|
||||
* @throws IOException if error reading from ByteProvider
|
||||
*/
|
||||
public static void setProgramProperties(Program prog, ByteProvider provider,
|
||||
String executableFormatName) throws IOException {
|
||||
String executableFormatName, TaskMonitor monitor) throws IOException {
|
||||
prog.setExecutablePath(provider.getAbsolutePath());
|
||||
if (executableFormatName != null) {
|
||||
prog.setExecutableFormat(executableFormatName);
|
||||
}
|
||||
FSRL fsrl = provider.getFSRL();
|
||||
String md5 =
|
||||
(fsrl != null && fsrl.getMD5() != null) ? fsrl.getMD5() : computeBinaryMD5(provider);
|
||||
String md5;
|
||||
monitor.setIndeterminate(true);
|
||||
if (fsrl != null && fsrl.getMD5() != null) {
|
||||
md5 = fsrl.getMD5();
|
||||
}
|
||||
else {
|
||||
monitor.setMessage("Computing MD5...");
|
||||
md5 = computeBinaryMD5(provider);
|
||||
}
|
||||
if (fsrl != null) {
|
||||
if (fsrl.getMD5() == null) {
|
||||
fsrl = fsrl.withMD5(md5);
|
||||
@@ -345,8 +353,12 @@ public abstract class AbstractProgramLoader implements Loader {
|
||||
FSRL.writeToProgramInfo(prog, fsrl);
|
||||
}
|
||||
prog.setExecutableMD5(md5);
|
||||
|
||||
monitor.setMessage("Computing SHA256...");
|
||||
String sha256 = computeBinarySHA256(provider);
|
||||
prog.setExecutableSHA256(sha256);
|
||||
|
||||
monitor.setIndeterminate(false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -50,7 +50,7 @@ public class LoaderService {
|
||||
for (Loader loader : getAllLoaders()) {
|
||||
if (loaderFilter.test(loader)) {
|
||||
if (!loader.isFallback()) {
|
||||
tryLoadSpecs(loader, provider, loaderMap);
|
||||
tryLoadSpecs(loader, provider, loaderMap, monitor);
|
||||
}
|
||||
else {
|
||||
fallback.add(loader);
|
||||
@@ -64,7 +64,7 @@ public class LoaderService {
|
||||
.map(Loader::getName)
|
||||
.anyMatch(Predicate.not(BinaryLoader.BINARY_NAME::equals));
|
||||
if (!matches) {
|
||||
fallback.forEach(loader -> tryLoadSpecs(loader, provider, loaderMap));
|
||||
fallback.forEach(loader -> tryLoadSpecs(loader, provider, loaderMap, monitor));
|
||||
}
|
||||
|
||||
return loaderMap;
|
||||
@@ -90,9 +90,13 @@ public class LoaderService {
|
||||
* @param loader The {@link Loader} to query
|
||||
* @param provider The {@link ByteProvider} to load from
|
||||
* @param loaderMap The {@link LoaderMap} to populate with discovered {@link LoadSpec}s
|
||||
* @param monitor The {@link TaskMonitor}
|
||||
*/
|
||||
private static void tryLoadSpecs(Loader loader, ByteProvider provider, LoaderMap loaderMap) {
|
||||
private static void tryLoadSpecs(Loader loader, ByteProvider provider, LoaderMap loaderMap,
|
||||
TaskMonitor monitor) {
|
||||
try {
|
||||
monitor.setMessage("Trying loader: " + loader.getName());
|
||||
monitor.setIndeterminate(true);
|
||||
Collection<LoadSpec> loadSpecs = loader.findSupportedLoadSpecs(provider);
|
||||
if (!CollectionUtils.isBlank(loadSpecs)) {
|
||||
loaderMap.put(loader, loadSpecs);
|
||||
@@ -105,6 +109,9 @@ public class LoaderService {
|
||||
Msg.error(LoaderService.class, "Unexpected Loader exception from " + loader.getName(),
|
||||
e);
|
||||
}
|
||||
finally {
|
||||
monitor.setIndeterminate(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -191,7 +191,7 @@ public class MachoPrelinkFileSystem extends GFileSystemBase implements GFileSyst
|
||||
new MessageLog(), monitor);
|
||||
|
||||
AbstractProgramLoader.setProgramProperties(program, providerWrapper,
|
||||
MachoLoader.MACH_O_NAME);
|
||||
MachoLoader.MACH_O_NAME, monitor);
|
||||
program.setExecutablePath(file.getPath()); // override the value set by AbstractProgramLoader.setProgramProperties
|
||||
|
||||
if (file.equals(systemKextFile)) {
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@@ -172,6 +172,8 @@ class FileBytesAdapterV0 extends FileBytesAdapter {
|
||||
monitor.initialize(size);
|
||||
}
|
||||
|
||||
monitor.setMessage("Creating file bytes...");
|
||||
|
||||
int maxBufSize = getMaxBufferSize();
|
||||
int bufCount = (int) (size / maxBufSize);
|
||||
int sizeLastBuf = (int) (size % maxBufSize);
|
||||
|
||||
Reference in New Issue
Block a user