问题 我可以在VS中的CreateProcess上添加断点


我可以在Visual Studio中的Windows CreateProcess API上添加断点,就像我在Windbg中可以做到的那样吗?


8611
2017-07-15 11:41


起源



答案:


是 - 转到“Debug / New breakpoint / Break at function ...”并粘贴它:

{,,kernel32.dll}_CreateProcessW@40

进入功能框。

假设Unicode构建 - 替换 W 同 A 用于ANSI构建。

一点解释: @40 piece是stdcall调用约定的一部分,并给出函数所采用的参数的字节数。在win32中,这几乎总是参数数量的4倍。下划线也是stdcall调用约定的一部分。

相关说明:有时调试器看到的函数名称与其真实名称不同 - 请参阅此博客文章以获取示例,以及如何找到要使用的正确名称: 在user32.dll中的Win32 API函数上设置Visual Studio断点


16
2017-07-15 11:45



最好打破两者。由于CreateProcessW具有时髦的非const行为,即使Unicode应用程序也可能调用CreateProcessA。 CreateProcess宏不会隐藏底层的两个函数声明,因此它们仍然可以调用。这也适用于其他功能对的类似宏。 - MSalters
还有一点需要注意,你必须下载 kernel32.dll 首先是符号。您可以从Debug / Windows / Modules中的上下文菜单中执行此操作。 - ulidtko
{,,,}语法的解释如下: msdn.microsoft.com/en-us/library/wztycb7f(v=vs.100).aspx 请注意,无论出于何种原因,视觉工作室都不存在高于vs2010的文章 - dev_null


答案:


是 - 转到“Debug / New breakpoint / Break at function ...”并粘贴它:

{,,kernel32.dll}_CreateProcessW@40

进入功能框。

假设Unicode构建 - 替换 W 同 A 用于ANSI构建。

一点解释: @40 piece是stdcall调用约定的一部分,并给出函数所采用的参数的字节数。在win32中,这几乎总是参数数量的4倍。下划线也是stdcall调用约定的一部分。

相关说明:有时调试器看到的函数名称与其真实名称不同 - 请参阅此博客文章以获取示例,以及如何找到要使用的正确名称: 在user32.dll中的Win32 API函数上设置Visual Studio断点


16
2017-07-15 11:45



最好打破两者。由于CreateProcessW具有时髦的非const行为,即使Unicode应用程序也可能调用CreateProcessA。 CreateProcess宏不会隐藏底层的两个函数声明,因此它们仍然可以调用。这也适用于其他功能对的类似宏。 - MSalters
还有一点需要注意,你必须下载 kernel32.dll 首先是符号。您可以从Debug / Windows / Modules中的上下文菜单中执行此操作。 - ulidtko
{,,,}语法的解释如下: msdn.microsoft.com/en-us/library/wztycb7f(v=vs.100).aspx 请注意,无论出于何种原因,视觉工作室都不存在高于vs2010的文章 - dev_null