Ghidra script memcpy.java
AlexeyE
java
a year ago
1.5 kB
19
Indexable
//Copy selected memory to another address
//@author
//@category Memory
//@keybinding
//@menupath
//@toolbar
import ghidra.app.script.GhidraScript;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressRange;
import ghidra.program.model.mem.Memory;
import ghidra.program.model.mem.MemoryBlock;
public class memcpy extends GhidraScript {
@Override
protected void run() throws Exception {
if (currentSelection == null || currentSelection.isEmpty())
{
printf("Please select source data\n");
return;
}
if (currentSelection.getNumAddressRanges() != 1)
{
printf("Please select only one address range");
return;
}
AddressRange srcRange = currentSelection.getFirstRange();
Address srcStart = srcRange.getMinAddress();
long length = srcRange.getMaxAddress().subtract(srcStart) + 1;
Address dstAddr = askAddress("memcpy",
String.format("Copy %d (0x%X) bytes from %s to", length, length, srcStart.toString()),
currentLocation.getAddress().toString());
Memory memory = currentProgram.getMemory();
MemoryBlock dstBlock = memory.getBlock(dstAddr);
if (!dstBlock.isInitialized())
{
printf("Please configure destignation memory as initialized");
return;
}
for (long i = 0; i < length; i++)
{
byte b = memory.getByte(srcStart.add(i));
memory.setByte(dstAddr.add(i), b);
}
}
}
Editor is loading...
Leave a Comment