当我使用“trace into”时,它不会只在“Run Trace”窗口中记录每一条执行的指令,而只记录其中的一些。我必须设置断点才能记录一些指令。
例如,现在我正在使用 TLS 回调跟踪程序。我在系统入口点中断,所以我从 ntdll 开始并点击“trace into”,但是如果我没有在它上面放置断点,则不会记录来自主可执行文件的 TLS 回调。如果我在它上面放置一个断点,它就会出现在运行跟踪中。如何在不设置断点的情况下记录每条指令?
我已取消选中“不要输入系统 dll”框并选中“始终跟踪字符串函数”框(及其所有其他组合)。
我还尝试设置跟踪条件“当 EIP 介于 400000-500000 之间时暂停跟踪”,这仅在我在 TLS 上设置断点时才有效(即,一旦遇到断点,单击“跟踪到”将单步执行 TLS 代码并且不会在我设置的断点之前暂停),如果我不设置断点则不起作用。显然我错过了一些东西,但我已经尝试了我能想到的一切。
还有另一件事:当我从 ntdll 按下“执行直到用户代码”时,它不会在 TLS 回调上停止(除非我在那里放置断点)。为什么会这样?
更新:原来问题是我使用的是 64 位操作系统。我在 32 位窗口中再次运行它并且 TLS 跟踪良好。
“执行直到用户代码”仍然不会中断 TLS 回调。