当我发现一些奇怪的东西时,我正在反转OSX VM上的一些恶意软件。在单步执行指令时,仅跳过int 0x80之后的指令,即执行该指令,而无需我单步执行。为什么会这样?您是否遇到过类似的事情?

#1 楼

单步执行代码时,将设置T标志,以使CPU在指令完成执行后可以中断。当发生中断时,T标志的状态将放在堆栈上,并在处理程序执行iret指令时使用。但是,由于与堆栈初始化有关的遗留问题,iret指令是少数几个导致T标志触发单指令延迟的指令之一。

所以跳过的指令正在执行,但您无法介入(但是如果您在该位置设置一个断点并运行到该点,那么您将得到一个中断)。

评论


+1。听起来好像OP对这些底层细节不感兴趣,但是现在我明白了为什么您在争论我的答案没有包含所要求的信息。但是事实证明我误解了这个问题。感谢您指出。

– 0xC0000022L♦
13年4月29日在17:09



我们在其他操作系统中是否观察到相同的行为? * BSD,Linux,OpenSolaris等...

–恐怖
13年4月29日在18:04

@perror:无论何时使用中断处理程序并因此使用iret,都应出于所有实际目的。

– 0xC0000022L♦
13年4月29日在19:46