我在 IDA 中使用以下 IDC 脚本:
#include <idc.idc>
static main()
{
for (i=0; i<10; i++)
{
PauseProcess();
GetDebuggerEvent(WFNE_SUSP, -1);
Message("%s\n", GetFunctionName(ScreenEA()));
ResumeProcess();
//Sleep(50); //does not work, see remarks below
//GetDebuggerEvent(WFNE_SUSP, 1); //same
}
}
主要思想是定期暂停/恢复进程并检查当前功能是什么(用于分析目的)。
我正在寻找的是一个 IDC 函数,它将在进程仍在运行时暂停脚本一段给定的时间(例如:50 毫秒)。可以从挂起状态恢复已调试进程执行并在给定时间内运行代码的函数也可以。
到目前为止我尝试过的:
Sleep(time): 没有按预期工作,因为它也停止了调试进程的执行(这不是我想要的)。我希望进程在脚本等待时继续运行。GetDebuggerEvent(WFNE_SUSP, 1):想法是等待挂起事件(永远不会发生)并使用超时(此处设置为 1 秒)。它有效,但问题是时间以秒为单位指定,这是一个太大的间隔(如果我可以以毫秒为单位指定它就可以了)。