单步步入(F7)
单步步过(F8)
每个软件的快捷键不同,这里以DTDebug为例。
单不步入与单步步过在没有遇到call之前作用相同,不同的是
当遇到call时
单步步入会进入call的调用一步一步执行
单步步过会将调用的指令当成一步执行
断点 0xCC
阻断程序继续运行
int 3指令也可以实现相同的操作
设置EFL的DF位可以实现F7
而F8是在下一条指令处下一个断点,所以当执行完call之后能在断点处继续执行指令。
所以如果在call执行后调用的是改变栈顶数据的指令mov dword pdr sd:[0]
此时用F8会跟丢程序,达到反调试的目的。此方法当使用F7时失效。
但是如果我们一个call套两个call两个call中再套call,在把真正的指令写在任何一个call中,其他的call中写大量无用指令,此时用F7不现实,而用F8又可能找不到真正的程序,达到反调试的目的。