mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-01-08 21:47:59 -05:00
GP-6147: Added a new table column for memory block source
This commit is contained in:
@@ -151,7 +151,8 @@ public class MachoProgramBuilder {
|
||||
processCorruptLoadCommands();
|
||||
|
||||
// Markup structures
|
||||
markupHeaders(machoHeader, setupHeaderAddr(machoHeader.getAllSegments()));
|
||||
markupHeaders(machoHeader,
|
||||
setupHeaderAddr(machoHeader.getAllSegments(), provider.getName()));
|
||||
markupSections();
|
||||
markupLoadCommandData(machoHeader, provider.getName());
|
||||
markupChainedFixups(machoHeader, chainedFixups);
|
||||
@@ -1100,10 +1101,11 @@ public class MachoProgramBuilder {
|
||||
* area in the "OTHER" address space for the header to live in.
|
||||
*
|
||||
* @param segments A {@link Collection} of {@link SegmentCommand Mach-O segments}
|
||||
* @param source A name that represents where the header came from
|
||||
* @return The {@link Address} of {@link MachHeader} in memory
|
||||
* @throws AddressOverflowException if the address lies outside the address space
|
||||
*/
|
||||
protected Address setupHeaderAddr(Collection<SegmentCommand> segments)
|
||||
protected Address setupHeaderAddr(Collection<SegmentCommand> segments, String source)
|
||||
throws AddressOverflowException {
|
||||
Address headerAddr = null;
|
||||
long lowestFileOffset = Long.MAX_VALUE;
|
||||
@@ -1125,7 +1127,7 @@ public class MachoProgramBuilder {
|
||||
// and copy the header there.
|
||||
headerAddr = AddressSpace.OTHER_SPACE.getAddress(0);
|
||||
MemoryBlock headerBlock = MemoryBlockUtils.createInitializedBlock(program, true, "HEADER",
|
||||
headerAddr, fileBytes, 0, lowestFileOffset, "Header", "", false, false, false, log);
|
||||
headerAddr, fileBytes, 0, lowestFileOffset, "Header", source, false, false, false, log);
|
||||
return headerBlock.getStart();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/* ###
|
||||
* IP: GHIDRA
|
||||
*
|
||||
* 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.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package ghidra.util.table.field;
|
||||
|
||||
import ghidra.docking.settings.Settings;
|
||||
import ghidra.framework.plugintool.ServiceProvider;
|
||||
import ghidra.program.model.listing.Program;
|
||||
import ghidra.program.model.mem.Memory;
|
||||
import ghidra.program.model.mem.MemoryBlock;
|
||||
import ghidra.program.util.ProgramLocation;
|
||||
|
||||
public class MemorySourceProgramLocationBasedTableColumn extends
|
||||
ProgramLocationTableColumnExtensionPoint<ProgramLocation, String> {
|
||||
|
||||
@Override
|
||||
public String getColumnName() {
|
||||
return "Mem Source";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValue(ProgramLocation rowObject, Settings settings, Program program,
|
||||
ServiceProvider serviceProvider) throws IllegalArgumentException {
|
||||
Memory memory = program.getMemory();
|
||||
MemoryBlock block = memory.getBlock(rowObject.getAddress());
|
||||
if (block == null) {
|
||||
return "";
|
||||
}
|
||||
return block.getSourceName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProgramLocation getProgramLocation(ProgramLocation rowObject, Settings settings,
|
||||
Program program, ServiceProvider serviceProvider) {
|
||||
return rowObject;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user