我想启动一个包含命令行的进程。在每次启动过程时,我希望使用g阻击来启用页面堆,并允许windbg附加到进程。
如何将命令行参数添加到g阻隔UI中?
发布于 2016-02-07 22:18:23
你不知道。你把不相关的事情混在一起了。
PageHeap
为了启用堆验证 ("PageHeap"),您可以使用GFlags实用工具来设置您想要的配置,或者使用GUI或者传递给它批准的命令行参数(参见GFlags和PageHeap )。无论哪种方式,此设置都是您定义的所有二进制文件的全局设置。
调试
要在每次启动调试器下运行该程序,您可能希望在Image执行选项下使用调试器设置。您也可以使用GFlags设置它。在Image选项卡(在指定EXE名称和点击选项卡之后)勾选调试器复选框并输入调试器的路径。
这种机制的工作方式是,(在CreateProcess中的某个地方)有一个测试,测试是否为您试图运行的程序设置了IFEO\Debugger,如果设置了它,则执行Debugger值中的任何设置**,并传递原始命令行*。
所以如果你
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\foo.exe\Debugger要成为C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe,然后尝试执行C:\Users\d_blk\Desktop\foo.exe -param 1 -param 2,Windows将运行
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe C:\Users\d_blk\Desktop\foo.exe -param 1 -param 2WinDbg在foo.exe之后将所有内容传递给目标程序(如注意到的这里 )。
因此,您可以看到,没有必要将命令行参数设置到您正在调试的程序的任何地方,而是在运行它的任何地方。
PageHeap和IFEO\Debugger之间的唯一连接是可以通过GFlags实用程序来控制它们。
注意事项
注意所有使用IFEO\Debugger的常用警告。例如:
CreateProcess获得WinDbg的句柄,而不是目标进程(和进程ID等)。STARTUPINFO参数中的任何信息都适用于WinDbg,而不是目标进程。我想lpEnvironment也是一样的。如果这对你没什么影响的话。如果是的话,另一种方法可能是在程序开始时添加一个未处理的异常,并将WinDbg设置为验尸调试器(AeDebug)。
https://stackoverflow.com/questions/35209951
复制相似问题