[Asm] 纯文本查看 复制代码 .code
; 声明外部函数
extern HookCallback:proc
extern GetOriginalFunction:proc
public GenericDetour ; 导出当前函数
GenericDetour proc
; 保存flags寄存器
pushfq
; 保存所有非易失性寄存器
push rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
; 保存易失性寄存器
push rax
push rcx
push rdx
push r8
push r9
push r10
push r11
; 调用C++回调函数,现在堆栈是16字节对齐的
call HookCallback
; 恢复所有寄存器,包括rax
pop r11
pop r10
pop r9
pop r8
pop rdx
pop rcx
pop rax
; 恢复非易失性寄存器和flags
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
popfq
; 调用GetOriginalFunction获取对应的原函数trampoline地址
; 在x64调用约定中,第一个参数通过rcx传递
mov rcx, offset GenericDetour ; 将GenericDetour地址作为参数传递给GetOriginalFunction
call GetOriginalFunction
; 跳转到正确的原函数trampoline
; rax现在包含GetOriginalFunction的返回值(原始函数地址)
jmp rax
GenericDetour endp
end
上面这个汇编使用让Trae生成的,最终使用的时候老是会崩溃,修复来修复去都不行,想问问带佬看看有啥毛病没得 |