X8寄存器状态保存和恢复

使用 MSHookFunction 直接 hook void __usercall sub_E72C(void *a1@<X0>, _QWORD *a2@<X8>) 这个函数会闪退。查资料说要保存 x8 寄存器的状态。然后在论坛查到 Arm64位汇编怎么做状态保存和恢复。最后一顿操作猛如虎,奈何能力如病猫,结果并未hook成功。请知道的大牛不吝赐教,可否给答案或答案模版呢?

x8一般用来返回大对象的,你用返回大对象的函数去Hook应该就可以。

你的hook这么写:

struct BigObject {uint8_t data[64];} // 随便定义,大于两个寄存器大小应该就可以

struct BigObject (*origin_E72C)(void *a0); // 保存原来的函数指针

struct BigObject new_E72C(void *a0) // 用它去hook,这个函数就会多一个x8参数,返回会将result写入x8指向的内存
{
struct BigObjec result = origin_E72C(a0);
return result;
}

MSHookFunction ((void *) sub_E72C, (void *) new_E72C, (void **) & origin_E72C);

1 个赞

太感谢,成功hook