Commit 5d6a9540 authored by swift_gan's avatar swift_gan Committed by swift_gan

[NativeHook]fix push

parent b41514d8
...@@ -176,17 +176,17 @@ void AssemblerA64::Ldrsw(XRegister &rt, const MemOperand& memOperand) { ...@@ -176,17 +176,17 @@ void AssemblerA64::Ldrsw(XRegister &rt, const MemOperand& memOperand) {
void AssemblerA64::Pop(RegisterA64 &rd) { void AssemblerA64::Pop(RegisterA64 &rd) {
if (rd.isX()) { if (rd.isX()) {
Ldr(rd, MemOperand(&SP, -1 * rd.getWideInBytes(), PreIndex)); Ldr(rd, MemOperand(&SP, rd.getWideInBytes(), PostIndex));
} else { } else {
Ldr(rd, MemOperand(&WSP, -1 * rd.getWideInBytes(), PreIndex)); Ldr(rd, MemOperand(&WSP, rd.getWideInBytes(), PostIndex));
} }
} }
void AssemblerA64::Push(RegisterA64 &rt) { void AssemblerA64::Push(RegisterA64 &rt) {
if (rt.isX()) { if (rt.isX()) {
Str(rt, MemOperand(&SP, -1 * rt.getWideInBytes(), PreIndex)); Str(rt, MemOperand(&SP, -rt.getWideInBytes(), PreIndex));
} else { } else {
Str(rt, MemOperand(&WSP, -1 * rt.getWideInBytes(), PreIndex)); Str(rt, MemOperand(&WSP, -rt.getWideInBytes(), PreIndex));
} }
} }
......
...@@ -28,8 +28,8 @@ void Arm64Decoder::decode(void *codeStart, Addr codeLen, InstVisitor &visitor) { ...@@ -28,8 +28,8 @@ void Arm64Decoder::decode(void *codeStart, Addr codeLen, InstVisitor &visitor) {
CASE(LDR_UIMM) CASE(LDR_UIMM)
CASE(LDRSW_IMM) CASE(LDRSW_IMM)
CASE(LDRSW_UIMM) CASE(LDRSW_UIMM)
CASE(STR_IMM)
CASE(STR_UIMM) CASE(STR_UIMM)
CASE(STR_IMM)
CASE(B_BL) CASE(B_BL)
CASE(B_COND) CASE(B_COND)
CASE(BR_BLR_RET) CASE(BR_BLR_RET)
......
...@@ -395,8 +395,8 @@ void A64_STR_IMM::decode(STRUCT_A64(STR_IMM) *inst) { ...@@ -395,8 +395,8 @@ void A64_STR_IMM::decode(STRUCT_A64(STR_IMM) *inst) {
operand.addr_mode = AddrMode::PreIndex; operand.addr_mode = AddrMode::PreIndex;
break; break;
default: default:
operand.addr_mode = AddrMode::Offset;
valid = false; valid = false;
return;
} }
scale = static_cast<U8>(inst->size); scale = static_cast<U8>(inst->size);
offset = signExtend64(9, inst->imm9); offset = signExtend64(9, inst->imm9);
...@@ -428,8 +428,8 @@ void A64_STR_IMM::assembler() { ...@@ -428,8 +428,8 @@ void A64_STR_IMM::assembler() {
get()->addrmode = PreIndex; get()->addrmode = PreIndex;
break; break;
default: default:
get()->addrmode = Offset;
valid = false; valid = false;
return;
} }
} }
...@@ -620,8 +620,8 @@ void A64_LDR_IMM::decode(STRUCT_A64(LDR_IMM) *inst) { ...@@ -620,8 +620,8 @@ void A64_LDR_IMM::decode(STRUCT_A64(LDR_IMM) *inst) {
operand.addr_mode = AddrMode::PreIndex; operand.addr_mode = AddrMode::PreIndex;
break; break;
default: default:
operand.addr_mode = AddrMode::Offset;
valid = false; valid = false;
return;
} }
scale = static_cast<U8>(inst->size); scale = static_cast<U8>(inst->size);
offset = signExtend64(9, inst->imm9); offset = signExtend64(9, inst->imm9);
...@@ -653,8 +653,8 @@ void A64_LDR_IMM::assembler() { ...@@ -653,8 +653,8 @@ void A64_LDR_IMM::assembler() {
get()->addrmode = PreIndex; get()->addrmode = PreIndex;
break; break;
default: default:
get()->addrmode = Offset;
valid = false; valid = false;
return;
} }
} }
......
...@@ -526,7 +526,8 @@ namespace SandHook { ...@@ -526,7 +526,8 @@ namespace SandHook {
public: public:
enum AdMod { enum AdMod {
PostIndex = 0b00, Offset = 0b00,
PostIndex = 0b01,
PreIndex = 0b11 PreIndex = 0b11
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment