javax.swing.text.html.HTML.Tag#ghidra.util.Msg源码实例Demo

下面列出了javax.swing.text.html.HTML.Tag#ghidra.util.Msg 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: ghidra   文件: DIEAggregate.java
/**
 * Returns the {@link DebugInfoEntry die} instance pointed to by the requested attribute,
 * or null if the attribute does not exist.
 * <p>
 * @param attribute
 * @return
 */
public DebugInfoEntry getRefDIE(int attribute) {
	AttrInfo attrInfo = findAttribute(attribute);
	if (attrInfo == null) {
		return null;
	}

	DWARFNumericAttribute val = attrInfo.getValue(DWARFNumericAttribute.class);
	long offset = (val != null) ? val.getUnsignedValue() : -1;

	DebugInfoEntry result = getProgram().getEntryAtByteOffsetUnchecked(offset);
	if (result == null) {
		Msg.warn(this, "Invalid reference value [" + Long.toHexString(offset) + "]");
		Msg.warn(this, this.toString());
	}
	return result;
}
 
源代码2 项目: ghidra   文件: EntryDescriptorID.java
public final static String convertEntryIdToName(int entryID) {
	Field [] fields = EntryDescriptorID.class.getDeclaredFields();
	for (Field field : fields) {
		if (field.getName().startsWith("ENTRY_")) {
			try {
				Integer value = (Integer)field.get(null);
				if (value == entryID) {
					return field.getName().substring("ENTRY_".length());
				}
			}
			catch (Exception e) {
			    Msg.error(EntryDescriptorID.class, "Unexpected Exception: " + e.getMessage(), e);
			}
		}
	}
	return "Unrecognized entry id: 0x"+Integer.toHexString(entryID);
}
 
源代码3 项目: ghidra   文件: ExtensionUtils.java
/**
 * Extracts information from a Java Properties file to create an {@link ExtensionDetails}
 * object.
 * 
 * @param resourceFile the resource file file to parse
 * @return a new extension details object
 */
public static ExtensionDetails createExtensionDetailsFromPropertyFile(
		ResourceFile resourceFile) {

	try (InputStream in = resourceFile.getInputStream()) {
		Properties props = new Properties();
		props.load(in);
		return createExtensionDetailsFromProperties(props);
	}
	catch (IOException e) {
		Msg.error(null,
			"Error processing extension properties for " + resourceFile.getAbsolutePath(),
			e);
		return null;
	}
}
 
源代码4 项目: ghidra   文件: AnalysisScheduler.java
public void registerOptions(Options options) {
	Options analyzerOptions = options.getOptions(analyzer.getName());

	boolean defaultEnable = analyzer.getDefaultEnablement(analysisMgr.getProgram());

	boolean overrideEnable = getEnableOverride(defaultEnable);

	// only warn when option registered
	if (defaultEnable != overrideEnable) {
		Msg.warn(this,
			"Analyzer \'" + analyzer.getName() + "\' for " +
				analysisMgr.getProgram().getName() + " " +
				(overrideEnable ? "enabled" : "disabled") + " by PSPEC file override");
	}

	options.registerOption(analyzer.getName(),
		overrideEnable, null,
		analyzer.getDescription());

	analyzer.registerOptions(analyzerOptions, analysisMgr.getProgram());
}
 
源代码5 项目: ghidra   文件: Preferences.java
/**
 * Gets an input stream to a file that is the same named file within a different 
 * application version directory for this user. This method will search for an 
 * alternate file based on the application version directories modification times 
 * and will use the first matching file it finds.  
 * 
 * @return a file input stream for an alternate file or null.
 */
private static FileInputStream getAlternateFileInputStream() {
	File previousFile =
		GenericRunInfo.getPreviousApplicationSettingsFile(APPLICATION_PREFERENCES_FILENAME);
	if (previousFile == null) {
		return null;
	}

	try {
		FileInputStream fis = new FileInputStream(previousFile);
		Msg.info(Preferences.class, "Loading previous preferences: " + previousFile);
		return fis;
	}
	catch (FileNotFoundException fnfe) {
		// Ignore so we can try another directory.
	}

	return null;
}
 
源代码6 项目: ghidra   文件: EditActionManager.java
private void clearCertPath() {

		String path = ApplicationKeyManagerFactory.getKeyStore();
		if (path == null) {
			// unexpected
			clearCertPathAction.setEnabled(false);
			return;
		}

		if (OptionDialog.YES_OPTION != OptionDialog.showYesNoDialog(tool.getToolFrame(),
			"Clear PKI Certificate", "Clear PKI certificate setting?\n(" + path + ")")) {
			return;
		}

		try {
			ApplicationKeyManagerFactory.setKeyStore(null, true);
			clearCertPathAction.setEnabled(false);
		}
		catch (IOException e) {
			Msg.error(this,
				"Error occurred while clearing PKI certificate setting: " + e.getMessage());
		}
	}
 
源代码7 项目: ghidra   文件: BlockGraphTask.java
/**
 * Runs the move memory operation.
 */
@Override
public void run(TaskMonitor monitor) throws CancelledException {
	AttributedGraph graph = createGraph();
	monitor.setMessage("Generating Graph...");
	try {
		GraphDisplay display = graphService.getGraphDisplay(reuseGraph, monitor);
		display.setGraphDisplayListener(
			new BlockModelGraphDisplayListener(tool, blockModel, display));
		if (showCode) {
			display.defineVertexAttribute(CODE_ATTRIBUTE);
			display.defineVertexAttribute(SYMBOLS_ATTRIBUTE);
			display.setVertexLabel(CODE_ATTRIBUTE, GraphDisplay.ALIGN_LEFT, 12, true,
				codeLimitPerBlock + 1);
		}
		display.setGraph(graph, actionName, appendGraph, monitor);
	}
	catch (GraphException e) {
		if (!monitor.isCancelled()) {
			Msg.showError(this, null, "Graphing Error", e.getMessage());
		}
	}
}
 
源代码8 项目: ghidra   文件: ELFExternalSymbolResolver.java
private static Collection<String> getOrderedLibraryNamesNeeded(Program program) {
	TreeMap<Integer, String> orderLibraryMap = new TreeMap<>();
	Options options = program.getOptions(Program.PROGRAM_INFO);
	//List<String> sortedOptionNames = new ArrayList<>();
	for (String optionName : options.getOptionNames()) {
		if (!optionName.startsWith(ElfLoader.ELF_REQUIRED_LIBRARY_PROPERTY_PREFIX) ||
			!optionName.endsWith("]")) {
			continue;
		}
		String libName = options.getString(optionName, null);
		if (libName == null) {
			continue;
		}
		String indexStr =
			optionName.substring(ElfLoader.ELF_REQUIRED_LIBRARY_PROPERTY_PREFIX.length(),
				optionName.length() - 1).trim();
		try {
			orderLibraryMap.put(Integer.parseInt(indexStr), libName.trim());
		}
		catch (NumberFormatException e) {
			Msg.error(ELFExternalSymbolResolver.class,
				"Program contains invalid property: " + optionName);
		}
	}
	return orderLibraryMap.values();
}
 
源代码9 项目: ghidra   文件: EclipseConnectorTask.java
/**
 * Creates a {@link ProcessBuilder} to launch Eclipse.
 * 
 * @param eclipseExecutableFile The Eclipse executable file.
 * @param eclipseWorkspaceDir The Eclipse workspace directory.  Could be null.
 * @return A {@link ProcessBuilder} to launch Eclipse.
 */
private ProcessBuilder createEclipseProcessBuilder(File eclipseExecutableFile,
		File eclipseWorkspaceDir) {
	List<String> args = new ArrayList<>();
	args.add(eclipseExecutableFile.getAbsolutePath());

	if (eclipseWorkspaceDir != null) {
		args.add("-data");
		args.add(eclipseWorkspaceDir.getAbsolutePath());
	}

	args.add("--launcher.appendVmargs");
	args.add("-vmargs");
	args.add("-Dghidra.install.dir=" + Application.getInstallationDirectory());

	// Eclipse on OS X can have file locking issues if the user home directory is networked.
	// The following property is set in the launch script if we should disable file locking
	// via the appropriate Eclipse JVM arg.
	if (Boolean.getBoolean("eclipse.filelock.disable")) {
		Msg.info(this, "Disabling Eclipse file locking...");
		args.add("-Dosgi.locking=none");
	}

	return new ProcessBuilder(args);
}
 
源代码10 项目: ghidra   文件: ExactInstructionsFunctionHasher.java
@Override
protected long hash(TaskMonitor monitor, ArrayList<CodeUnit> units, int byteCount)
		throws MemoryAccessException, CancelledException {
	byte[] buffer = new byte[byteCount];
	int offset = 0;
	for (CodeUnit codeUnit : units) {
		monitor.checkCanceled();

		try {
			codeUnit.getBytesInCodeUnit(buffer, offset);
			applyMask(buffer, offset, codeUnit);
		}
		catch (MemoryAccessException e) {
			Msg.warn(this, "Could not get code unit bytes at " + codeUnit.getAddress());
		}
		offset += codeUnit.getLength();
	}
	if (offset != byteCount) {
		throw new IllegalStateException("did NOT use all the codeUnit buffer bytes");
	}
	synchronized (digest) {
		digest.reset();
		digest.update(buffer, monitor);
		return digest.digestLong();
	}
}
 
源代码11 项目: Ghidra-Switch-Loader   文件: ByteUtil.java
public static void logBytes(byte[] data)
{
    StringBuilder sb = new StringBuilder();
    int lineWidth = 0;
    
    for (byte b : data) 
    {
        sb.append(String.format("%02X ", b));
        lineWidth++;
        
        if (lineWidth >= 16)
        {
            sb.append("\n");
            lineWidth = 0;
        }
    }
    
    Msg.info(null, sb.toString());
}
 
源代码12 项目: ghidra   文件: ThreadedTableTest.java
private void assertPendingPanelShowing() {
	JComponent pendingPanel = (JComponent) getInstanceField("pendingPanel", threadedTablePanel);

	waitForCondition(() -> {

		boolean isShowing = isShowing(pendingPanel);

		if (!isShowing) {
			JComponent loadedComponent =
				(JComponent) getInstanceField("loadedComponent", threadedTablePanel);
			String name = (loadedComponent == null) ? "<no component showing>"
					: loadedComponent.getName();
			Msg.debug(this, "Pending is not yet showing--what is?: " + name);
		}

		return isShowing;
	});
}
 
源代码13 项目: ghidra   文件: ToolActionManager.java
/**
 * Create the Template object and add it to the tool chest.
 */
private void addToolTemplate(InputStream instream, String path) {
	try {
		SAXBuilder sax = XmlUtilities.createSecureSAXBuilder(false, false);
		Element root = sax.build(instream).getRootElement();

		ToolTemplate template = new GhidraToolTemplate(root, path);
		if (plugin.getActiveProject().getLocalToolChest().addToolTemplate(template)) {
			Msg.info(this,
				"Successfully added " + template.getName() + " to project tool chest.");
		}
		else {
			Msg.warn(this, "Could not add " + template.getName() + " to project tool chest.");
		}
	}
	catch (Exception e) {
		Msg.showError(getClass(), tool.getToolFrame(), "Error Reading Tool",
			"Could not read tool: " + e, e);
	}
}
 
源代码14 项目: ghidra   文件: AbstractToolSavingTest.java
protected Map<String, Object> getOptionsMap(PluginTool tool) {
	Map<String, Object> map = new TreeMap<>();
	Options[] options = tool.getOptions();
	for (Options option : options) {
		String optionsName = option.getName();

		if (optionsName.equals("Key Bindings")) {
			Msg.debug(this, "break");
		}

		List<String> optionNames = option.getOptionNames();
		for (String name : optionNames) {
			Object value = invokeInstanceMethod("getObject", option,
				new Class[] { String.class, Object.class }, new Object[] { name, null });
			map.put(optionsName + "." + name, value);
		}
	}
	return map;
}
 
源代码15 项目: ghidra   文件: ModuleSortPlugin.java
@Override
public void run(TaskMonitor monitor) {
	int txId = -1;
	boolean success = false;
	try {
		txId = currentProgram.startTransaction(getName());
		doSort(module, comparator, monitor);
		success = true;
	}
	catch (CancelledException ce) {
		// don't care
	}
	catch (Throwable t) {
		Msg.showError(this, null, "Error", "Module Sort Failed", t);
	}
	finally {
		currentProgram.endTransaction(txId, success);
	}
}
 
@Override
public AddressRange getCorrelatedDestinationRange(Address sourceAddress, TaskMonitor monitor)
		throws CancelledException {
	try {
		initializeCorrelation(monitor);
		Address destinationAddress = addressCorrelation.getAddressInSecond(sourceAddress);
		if (destinationAddress == null) {
			return null; // No matching destination.
		}
		return new AddressRangeImpl(destinationAddress, destinationAddress);
	}
	catch (MemoryAccessException e) {
		Msg.error(this, "Could not create HashedFunctionAddressCorrelation", e);
		return null;
	}
}
 
源代码17 项目: ghidra   文件: LinuxFileUrlHandler.java
private void doImport(Component component, Object transferData, ServiceProvider sp,
		DomainFolder folder) {

	FileImporterService im = sp.getService(FileImporterService.class);
	if (im == null) {
		Msg.showError(this, component, "Could Not Import", "Could not find importer service.");
		return;
	}

	List<File> files = toFiles(transferData);
	if (files.isEmpty()) {
		return;
	}

	if (files.size() == 1 && files.get(0).isFile()) {
		im.importFile(folder, files.get(0));
	}
	else {
		im.importFiles(folder, files);
	}
}
 
源代码18 项目: ghidra   文件: DWARFSectionProviderFactory.java
/**
 * Iterates through the statically registered {@link #sectionProviderFactoryFuncs factory funcs},
 * trying each factory method until one returns a {@link DWARFSectionProvider} 
 * that can successfully retrieve the {@link DWARFSectionNames#MINIMAL_DWARF_SECTIONS minimal} 
 * sections we need to do a DWARF import.
 * <p>
 * The resulting {@link DWARFSectionProvider} is {@link Closeable} and it is the caller's
 * responsibility to ensure that the object is closed when done. 
 * 
 * @param program
 * @return {@link DWARFSectionProvider} that should be closed by the caller or NULL if no
 * section provider types match the specified program.
 */
public static DWARFSectionProvider createSectionProviderFor(Program program) {
	for (Function<Program, DWARFSectionProvider> factoryFunc : sectionProviderFactoryFuncs) {
		DWARFSectionProvider sp = factoryFunc.apply(program);
		if (sp != null) {
			try {
				if (sp.hasSection(DWARFSectionNames.MINIMAL_DWARF_SECTIONS)) {
					return sp;
				}
			}
			catch (Exception e) {
				Msg.warn(DWARFSectionProviderFactory.class,
					"Problem detecting DWARFSectionProvider", e);
			}
			sp.close();
		}
	}
	return null;
}
 
源代码19 项目: ghidra   文件: AbstractMergeTest.java
protected void checkTransactions(String prefix) {
	Program p = mtf.getResultProgram();
	if (p == null) {
		return;
	}

	Transaction tx = p.getCurrentTransaction();
	if (tx == null) {
		return;
	}
	ArrayList<String> list = tx.getOpenSubTransactions();
	StringBuffer tip = new StringBuffer();
	Iterator<String> iter = list.iterator();
	while (iter.hasNext()) {
		if (tip.length() != 0) {
			tip.append('\n');
		}
		tip.append(iter.next());
	}
	Msg.error(this, prefix + "Test Case " + testName.getMethodName() +
		" : ERROR: Transactions still exist!  " + tip.toString());
}
 
源代码20 项目: ghidra   文件: GhidraFileChooserTest.java
@Test
public void testDesktop_SystemNativeDesktop() throws Exception {
	File userDesktopDir = chooser.getModel().getDesktopDirectory();

	if (userDesktopDir == null) {
		Msg.warn(this, "NOTE: unable to test 'Desktop' button in GhidraFileChooser " +
			"in this enviornment because it does not have a detectable Desktop folder.");
		return;
	}

	pressDesktop();
	waitForChooser();

	assertEquals("File chooser did not switch to the user's Desktop directory", userDesktopDir,
		getCurrentDirectory());
}
 
源代码21 项目: ghidra   文件: OptionType.java
@Override
Object stringToObject(String string) {
	SaveState saveState = getSaveStateFromXmlString(string);
	String customOptionClassName = saveState.getString("CUSTOM_OPTION_CLASS", null);
	try {
		Class<?> c = Class.forName(customOptionClassName);
		CustomOption option = (CustomOption) c.newInstance();
		option.readState(saveState);
		return option;
	}
	catch (Exception e) {
		Msg.error(this, "Can't create customOption instance for: " + customOptionClassName,
			e);
	}
	return null;
}
 
源代码22 项目: ghidra   文件: GNUExternalDisassembler.java
private static void reportMultipleMappings(Language language) {
	List<String> externalNames = language.getLanguageDescription().getExternalNames("gnu");
	if (externalNames != null && externalNames.size() > 1) {
		LanguageID currentLanguageID = language.getLanguageID();
		StringBuilder sb = new StringBuilder();
		boolean prependSeparator = false;
		for (String name : externalNames) {
			if (prependSeparator)
				sb.append(", ");
			sb.append(name);
			prependSeparator = true;
		}
		Msg.warn(GNUExternalDisassembler.class,
			"Language " + currentLanguageID + " illegally maps to multiple (" +
				externalNames.size() + ") external gnu names: " + sb.toString() +
				".  The first external name will be used.");
	}
}
 
源代码23 项目: ghidra   文件: MemoryBlockUtils.java
/**
 * Adjusts the name of the fragment at the given address to the given name.
 * @param program the program whose fragment is to be renamed.
 * @param address the address of the fragment to be renamed.
 * @param name the new name for the fragment.
 */
public static void adjustFragment(Program program, Address address, String name) {
	Listing listing = program.getListing();
	String[] treeNames = listing.getTreeNames();
	for (String treeName : treeNames) {
		try {
			ProgramFragment frag = listing.getFragment(treeName, address);
			frag.setName(name);
		}
		catch (DuplicateNameException e) {
			Msg.warn(MemoryBlockUtils.class,
				"Could not rename fragment to match newly created block because of name conflict");
		}
	}
}
 
源代码24 项目: ghidra   文件: ParameterInfo.java
public Parameter createParameterDefinition(Function destFunction, int ordinal) {
	try {
		Parameter var =
			new MyParameter(getName(), getOrdinal(), getDataType(),
				getVariableStorage().getSerializationString(), destFunction.getProgram(),
				getSource());
		var.setComment(getComment());
		return var;
	}
	catch (InvalidInputException e) {
		Msg.error(this, "Unable to apply parameter '" + getName() + "' to function " +
			destFunction.getName() + ": " + e.getMessage());
		return null;
	}
}
 
源代码25 项目: ghidra   文件: ImageBaseDialog.java
/**
 * @see ghidra.util.bean.GhidraDialog#okCallback()
 */
@Override
   protected void okCallback() {
	if (addr != null && !addr.equals(currentAddr)) {
		Msg.info(this, "old base = "+program.getImageBase());
		Command cmd = new SetBaseCommand(addr);
		if (!tool.execute(cmd, program)) {
			setStatusText(cmd.getStatusMsg());
			return;
		}
		Msg.info(this, "new base = "+((ProgramDB)program).getImageBase());
	}
	close();
}
 
源代码26 项目: ghidra   文件: FileSystemFactoryMgr.java
private void addFactory(Class<? extends GFileSystem> fsClass) {
	FileSystemInfoRec fsir = FileSystemInfoRec.fromClass(fsClass);
	if (fsir == null) {
		Msg.error(this, "No valid FileSystemInfo found for " + fsClass.getName());
		return;
	}
	if (fsByType.containsKey(fsir.getType())) {
		FileSystemInfoRec prevFSI = fsByType.get(fsir.getType());
		Msg.error(this,
			"GFileSystem type '" + fsir.getType() + "' registered more than one time: " +
				fsClass.getName() + ", " + prevFSI.getFSClass().getName() +
				", ommitting second instance.");
		return;
	}

	if (fsir.getFactory() instanceof GFileSystemFactoryIgnore) {
		// don't register any filesystem that uses this factory
		return;
	}
	if (fsir.getFactory() instanceof GFileSystemProbeBytesOnly) {
		GFileSystemProbeBytesOnly pbo = (GFileSystemProbeBytesOnly) fsir.getFactory();
		if (pbo.getBytesRequired() > GFileSystemProbeBytesOnly.MAX_BYTESREQUIRED) {
			Msg.error(this,
				"GFileSystemProbeBytesOnly for " + fsClass.getName() +
					" specifies too large value for bytes_required: " + pbo.getBytesRequired() +
					", skipping this probe.");
		}
		else {
			largestBytesRequired = Math.max(largestBytesRequired, pbo.getBytesRequired());
		}
	}

	fsByType.put(fsir.getType(), fsir);
	sortedFactories.add(fsir);
}
 
源代码27 项目: ghidra   文件: DefaultPdbMember.java
private void parseBitField(String name) {
	if (name == null || kind != PdbKind.MEMBER) {
		return;
	}
	int bitFieldColonIndex = name.indexOf(':');
	if (bitFieldColonIndex >= 0) {

		isBitField = true;

		String bitSizeOffsetStr = name.substring(bitFieldColonIndex + 1);

		try {
			int colonIndex = bitSizeOffsetStr.indexOf(':');
			if (colonIndex > 0) {
				bitFieldOffset = (int) NumericUtilities.parseNumber(
					bitSizeOffsetStr.substring(colonIndex + 1));
				bitSizeOffsetStr = bitSizeOffsetStr.substring(0, colonIndex);
			}
			else {
				dataTypeParser.setMissingBitOffsetError();
			}
			bitFieldSize = (int) NumericUtilities.parseNumber(bitSizeOffsetStr);
		}
		catch (NumberFormatException e) {
			Msg.error(this, "Invalid PDB bitfield specification: " + name);
		}
	}
}
 
源代码28 项目: ghidra   文件: MemoryBytePatternSearcher.java
/**
 * Search initialized memory blocks for all patterns(bytes/mask/action).
 * Call associated action for each pattern matched.
 * 
 * @param program to be searched
 * @param searchSet set of bytes to restrict search, if null or empty then search all memory blocks
 * @param monitor allow canceling and reporting of progress
 * 
 * @throws CancelledException if canceled
 */
public void search(Program program, AddressSetView searchSet, TaskMonitor monitor)
		throws CancelledException {
	if (root == null) {
		root = SequenceSearchState.buildStateMachine(patternList);
	}

	numToSearch = getNumToSearch(program, searchSet);
	monitor.setMessage(searchName + " Search");
	monitor.initialize(numToSearch);

	MemoryBlock[] blocks = program.getMemory().getBlocks();
	for (MemoryBlock block : blocks) {
		monitor.setProgress(numSearched);
		// check if entire block has anything that is searchable
		if (!block.isInitialized()) {
			continue;
		}
		if (doExecutableBlocksOnly && !block.isExecute()) {
			continue;
		}
		if (searchSet != null && !searchSet.isEmpty() &&
			!searchSet.intersects(block.getStart(), block.getEnd())) {
			continue;
		}

		try {
			searchBlock(root, program, block, searchSet, monitor);
		}
		catch (IOException e) {
			Msg.error(this, "Unable to scan block " + block.getName() + " for " + searchName);
		}
		numSearched += block.getSize();
	}
}
 
源代码29 项目: ghidra   文件: AbstractCreateDataBackgroundCmd.java
/**
 * Output the error message to the log and output a possibly shorter status message for this 
 * command. This also creates a bookmark with the error message at the indicated address.
 * @param program the program where the error bookmark should be created.
 * @param bookmarkAddress the address where an error bookmark should be created.
 * @param errorMessage the detailed error message.
 * @param statusMessage an abbreviated error message that will appear as a status message.
 */
protected void handleErrorMessage(Program program, Address bookmarkAddress, String errorMessage,
		String statusMessage) {
	Msg.error(this, errorMessage);
	setStatusMsg(statusMessage);
	if (applyOptions.shouldCreateBookmarks()) {
		BookmarkManager bookmarkManager = program.getBookmarkManager();
		bookmarkManager.setBookmark(bookmarkAddress, BookmarkType.ERROR, "Data", errorMessage);
	}
}
 
源代码30 项目: Ghidra-Switch-Loader   文件: NXProgramBuilder.java
protected void createGlobalOffsetTable() throws AddressOverflowException, AddressOutOfBoundsException, IOException
{
    NXOAdapter adapter = this.nxo.getAdapter();
    ByteProvider memoryProvider = adapter.getMemoryProvider();
    
    // .got.plt needs to have been created first
    long gotStartOff = adapter.getGotOffset() - this.nxo.getBaseAddress();
    long gotSize = adapter.getGotSize();
    
    if (gotSize > 0)
    {
        Msg.info(this, String.format("Created got from 0x%X to 0x%X", gotStartOff, gotStartOff + gotSize));
        this.memBlockHelper.addSection(".got", gotStartOff, gotStartOff, gotSize, true, false, false);
    }
}