OSX 中奇怪的 GDB 行为

逆向工程 恶意软件 数据库 操作系统 x86 男子气概
2021-06-11 21:01:32

当我注意到一些奇怪的东西时,我正在逆转 OSX VM 上的一些恶意软件。在单步执行指令时,int 0x80跳过a 之后的指令会在我不单步执行的情况下执行。

例子:

 int 0x80
 inc eax ; <--- this gets skipped
 inc ecx ; <--- stepping resumes here

为什么会发生这种情况?你有没有遇到过类似的事情?

1个回答

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

所以跳过的指令正在执行,但你不能进入它(但如果你在那个位置设置一个断点并运行到那个点,那么你会得到一个中断)。