mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
Merge branch 'GT-0_ghidra1_PR-2018_SamL98_writeStackValue'
Conflicts: Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/Disassembler.java
This commit is contained in:
commit
d0e8b2faad
1 changed files with 9 additions and 18 deletions
|
@ -32,7 +32,8 @@ import ghidra.program.model.lang.*;
|
|||
import ghidra.program.model.listing.*;
|
||||
import ghidra.program.model.mem.MemoryBlock;
|
||||
import ghidra.program.model.mem.MemoryConflictException;
|
||||
import ghidra.util.*;
|
||||
import ghidra.util.DataConverter;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
import ghidra.util.exception.DuplicateNameException;
|
||||
import ghidra.util.task.TaskMonitor;
|
||||
|
@ -50,6 +51,8 @@ public class EmulatorHelper implements MemoryFaultHandler, EmulatorConfiguration
|
|||
|
||||
private MemoryFaultHandler faultHandler;
|
||||
|
||||
private DataConverter converter;
|
||||
|
||||
private BreakCallBack addressBreak = new BreakCallBack() {
|
||||
@Override
|
||||
public boolean addressCallback(Address addr) {
|
||||
|
@ -66,6 +69,8 @@ public class EmulatorHelper implements MemoryFaultHandler, EmulatorConfiguration
|
|||
stackMemorySpace = program.getCompilerSpec().getStackBaseSpace();
|
||||
|
||||
emulator = new Emulator(this);
|
||||
|
||||
converter = DataConverter.getInstance(program.getMemory().isBigEndian());
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
|
@ -271,10 +276,7 @@ public class EmulatorHelper implements MemoryFaultHandler, EmulatorConfiguration
|
|||
throws Exception {
|
||||
long offset = readRegister(stackPtrReg).longValue() + relativeOffset;
|
||||
byte[] bytes = readMemory(stackMemorySpace.getAddress(offset), size);
|
||||
if (program.getMemory().isBigEndian()) {
|
||||
return BigEndianDataConverter.INSTANCE.getBigInteger(bytes, size, signed);
|
||||
}
|
||||
return LittleEndianDataConverter.INSTANCE.getBigInteger(bytes, size, signed);
|
||||
return converter.getBigInteger(bytes, size, signed);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -287,12 +289,7 @@ public class EmulatorHelper implements MemoryFaultHandler, EmulatorConfiguration
|
|||
public void writeStackValue(int relativeOffset, int size, long value) throws Exception {
|
||||
long offset = readRegister(stackPtrReg).longValue() + relativeOffset;
|
||||
byte[] bytes = new byte[size];
|
||||
if (program.getMemory().isBigEndian()) {
|
||||
BigEndianDataConverter.INSTANCE.getBytes(value, bytes);
|
||||
}
|
||||
else {
|
||||
LittleEndianDataConverter.INSTANCE.getBytes(value, bytes);
|
||||
}
|
||||
converter.getBytes(value, size, bytes, 0);
|
||||
writeMemory(stackMemorySpace.getAddress(offset), bytes);
|
||||
}
|
||||
|
||||
|
@ -306,13 +303,7 @@ public class EmulatorHelper implements MemoryFaultHandler, EmulatorConfiguration
|
|||
public void writeStackValue(int relativeOffset, int size, BigInteger value) throws Exception {
|
||||
// TODO: verify that sign byte is not added to size of bytes
|
||||
long offset = readRegister(stackPtrReg).longValue() + relativeOffset;
|
||||
byte[] bytes;
|
||||
if (program.getMemory().isBigEndian()) {
|
||||
bytes = BigEndianDataConverter.INSTANCE.getBytes(value, size);
|
||||
}
|
||||
else {
|
||||
bytes = LittleEndianDataConverter.INSTANCE.getBytes(value, size);
|
||||
}
|
||||
byte[] bytes = converter.getBytes(value, size);
|
||||
writeMemory(stackMemorySpace.getAddress(offset), bytes);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue