- 积分
- 50
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
http://mobile.0110.cn/viewthread.php?tid=10621&extra=page%3D1
下面的源码是从上面这个地方看到的,我用sfe无法汇编成功。
$Segmented
$Mod167
Patch_Address EQU 1F8000h ;Free Space in Flash (CHANGE THIS)
Patch Section Code Word At Patch_address ; Start Patch at Patch_Address
main proc far ; start main of patch
;TODO,恢复跳转指令覆盖的语句
mov [-r0],r12
mov [-r0],r13
mov [-r0],r14
mov [-r0],r15
mov r4,#8 ;调用栈深度
cmp r12, #4E3h ;以下为判断察看条件,比如调用字符4E3的时候,需自行修改
jmp CC_NZ, ProcEnd
mov r15, r4
mov r14, #1000h ;调用栈的输出开始地址,我一般会用0C:1000
PopProc:
pop r12
pop r13
extp #0Ch, #1
mov [r14],r12 ;存储调用栈的Offset
add r14,#2
extp #0Ch, #1
mov [r14],r13 ;存储调用栈的Seg
add r14,#2
mov [-r0],r12 ;将系统栈的内容压入用户栈保存
mov [-r0],r13
sub r15,#1
jmp CC_NZ,PopProc ;判断深度
mov r15,r4 ;恢复系统栈
PushProc:
mov r13,[r0+]
mov r12,[r0+]
push r13
push r12
sub r15,#1
jmp CC_NZ,PushProc
ProcEnd:
mov r15,[r0+]
mov r14,[r0+]
mov r13,[r0+]
mov r12,[r0+]
rets
main endp
Patch EndS
END |
|