我想设置陷阱标志= 1,但不使用pop算法。我知道这是可能的,但我无法弄明白。
答案 0 :(得分:1)
FLAGS
被压入堆栈,并由IRET
从堆栈弹出。因此,如果您仍被允许PUSHF
,则可以执行类似
pushf
pop ax
or ax, 100h
push ax
call far do_iret
...
do_iret:
iret
如果不允许PUSHF
,您可以安装中断处理程序:
handler:
push bp
mov bp, sp
or word ptr [bp+6], 100h
pop bp
iret
set_trap_flag:
push 0
pop es
mov [es:42h*4], offset handler
mov [es:42h*4+2], segment handler
int 42h
其中42h
是一些未被使用的中断向量。
(注意:代码未经过测试,可能存在语法错误或错误。)