程序环境结构:
HookAPI.dll 可以对指定进程进行挂接,用来Hook指定的API函数.
mydll.dll 对要Hook的API建立的仿真API函数(比如:要Hook MessageBoxA, 在mydll.dll 里面建一个参数与返回值完全一样的myMessageBoxA函数 就能截获指定进程中的MessageBoxA )
HookExe.exe 用来调用HookAPI.dll 并指定要监控的进程。(比如说: test.exe)
test.exe 一个普通WIN32程序。在窗口中一按钮中执行MessageBoxA函数。我现在可以Hook系统的API,但是无法对自己编写的mydll.dll进行调试,目前一直是打用打印对话框来实现简单测试。当然我要Hook的api不是MessageBoxA这么简单的函数。我想请教做过dll远程挂接或远程注入的朋友,帮我讲一下。如何能调试。
HookAPI.dll 可以对指定进程进行挂接,用来Hook指定的API函数.
mydll.dll 对要Hook的API建立的仿真API函数(比如:要Hook MessageBoxA, 在mydll.dll 里面建一个参数与返回值完全一样的myMessageBoxA函数 就能截获指定进程中的MessageBoxA )
HookExe.exe 用来调用HookAPI.dll 并指定要监控的进程。(比如说: test.exe)
test.exe 一个普通WIN32程序。在窗口中一按钮中执行MessageBoxA函数。我现在可以Hook系统的API,但是无法对自己编写的mydll.dll进行调试,目前一直是打用打印对话框来实现简单测试。当然我要Hook的api不是MessageBoxA这么简单的函数。我想请教做过dll远程挂接或远程注入的朋友,帮我讲一下。如何能调试。
第二:用OutDebugString输出信息,用vc附加或dbgview获得改输出信息.如果是在启动期间做的,写文件吧.
into the epilog of all functions. Since you probably didn't inject _chkesp
(and the pointer would be hosed even if you did) then the process will
crash. The solution is to turn off all debugging options (not just info) in
that module, and add a file log switch in your release build.
http://blogs.msdn.com/lixiong/attachment/687357.ashx
“
总的来说,只要你有dll的pdb文件,就可以了。如果是vs 2003,把pdb路径设定好后,直接选择attach target process,加载了pdb文件后,你就可以打开cpp文件直接设定断点了”
我是使用的VS2003, 但你说的加载pdb文件,我不知道设置在那个地方
手头只有vs 2005vs 2005中tools -> options -> debugging -> symbols在这里把所有你自己写的dll文件的pdb文件放到一个路径,然后把路径填在上面就可以了然后你就可以选择attach to proces 然后选择file -> open,打开你的cpp文件,直接用f5放断点了