如何在不使用pop指令的情况下设置陷阱标志

时间:2016-03-30 01:31:39

标签: x86-16

我想设置陷阱标志= 1,但不使用pop算法。我知道这是可能的,但我无法弄明白。

1 个答案:

答案 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是一些未被使用的中断向量。

(注意:代码未经过测试,可能存在语法错误或错误。)