在调用kernel32.dll函数时获取调用堆栈

我有一个更改当前目录的进程,我会知道它在何时何地发生。 我怎么能这样做?

我尝试用Visual Studio在SetCurrentDirectoryA / SetCurrentDirectoryW中设置一个断点,但它不起作用。

你正在调试你自己的一个程序,还是你没有源代码? 关于调试无源应用程序,Visual Studio调试器不是非常友好; 在这种情况下,我会推荐WinDbg或OllyDbg – 甚至可以跳过调试器,并使用EasyHook编写测试记录器。

编辑:

尝试在{,,kernel32.dll}_SetCurrentDirectoryA@4设置断点 – 特殊的语法,并需要装饰的名称。 没有尝试过,但在这里找到它。 Google关键字:“ visual studio breakpoint api ”:)

您需要使用本机代码来附加/调试进程。 如果您错误地使用托管代码进行调试,则不会触发这些断点。

您的程序可能正在使用msvcrt函数更改目录。 您应该尝试在这些函数上放置断点:

 _chdir _chdrive