Adobe 如何控制多进程调试

Adobe 如何控制多进程调试,adobe,windbg,Adobe,Windbg,我正在用WinDbg分析AcroRd32.exeAcroRd32.exe有两个进程,一个进程(父进程-p)启动另一个进程(子进程-p)。我使用.childdbg1和|1s等命令调试这两个进程 我切换到child-p,然后切换回父-p,用条件断点监视kernel32.dll的CreateFileW和ReadFileapi。打开a.pdf时,只有CreateFileW被参数“C:\a.pdf”调用。我记得CreateFileW的返回值,即文件句柄,使用条件断点监视ReadFile的参数,但是没有使用

我正在用WinDbg分析
AcroRd32.exe
AcroRd32.exe
有两个进程,一个进程(父进程-p)启动另一个进程(子进程-p)。我使用
.childdbg1
|1s
等命令调试这两个进程

我切换到child-p,然后切换回父-p,用条件断点监视kernel32.dll的
CreateFileW
ReadFile
api。打开
a.pdf
时,只有
CreateFileW
被参数“C:\a.pdf”调用。我记得
CreateFileW
的返回值,即文件句柄,使用条件断点监视
ReadFile
的参数,但是没有使用
CreateFileW
的返回值调用
ReadFile
。然后,随着大量的
g
命令,令人困惑的事情发生了,
a.pdf
打开了

我很困惑。没有调用
ReadFile
,PDF打开了。AcrobatReader是如何做到的?我有两个假设,第一,它使用了一些像
CreateFileMapping
api;另一个(大部分)是child-p

让我们讨论第二个假设。当我调试父p时,子p没有挂起。它是如何打开(读取)文件的?

使用我看到第二个实例使用文件句柄调用
CreateFileW()
以及
ReadFile()

既然是这种情况,那么在WinDbg中使用断点也必须能够解决同样的问题。如果没有重现问题的确切步骤,我们将无法回答问题所在,例如,在断点的情况下

当我查看我的演练时,我认为以下可能会出错:

  • 您正在子进程的条件中使用父进程的文件句柄,尽管子进程获得了一个新句柄
  • 您在错误的进程上设置断点。断点是特定于进程的
  • 在断点的情况下,还有其他问题。检查
    .if
    j
    命令
下面是我的演练,它显示断点被命中。我这里没有使用条件断点

0:000> bp kernel32!CreateFileW
0:000> .childdbg 1
Processes created by the current process will be debugged
0:000> g
[...]
Breakpoint 0 hit
[...]
0:000> kb L1
 # ChildEBP RetAddr  Args to Child              
00 0045f0d8 011d95b1 0023ca98 00000000 00000007 kernel32!CreateFileW
0:000> du 0023ca98
0023ca98  "d:\temp\a.pdf"
0:000> gu
0:000> r eax
eax=000000f0
0:000> *** Note that this is the wrong process, it's the father
0:000> *** We should not set a breakpoint with a condition of 0xF0 as the handle
0:000> *** Let's wait for the child process
0:000> bd 0
0:000> sxe cpr
0:000> g
[...]
ModLoad: 011c0000 013e5000   AcroRd32.exe
[...]
1:009> bl
1:009> |0s
[...]
0:000> bl
     0 d Enable Clear  771a167f     0001 (0001)  0:**** kernel32!CreateFileW
0:000> |1s
[...]
1:009> bl
1:009> *** Did you note? Breakpoints are process specific
1:009> bp kernel32!CreateFileW
Bp expression 'kernel32!CreateFileW' could not be resolved, adding deferred bp
1:009> g
[...]
ntdll!LdrpDoDebuggerBreak+0x2c:
77850ed4 cc              int     3
1:009> bl
     1 e Disable Clear  771a167f     0001 (0001)  1:**** kernel32!CreateFileW
[...]
Breakpoint 1 hit
[...]
1:009> kb L1
 # ChildEBP RetAddr  Args to Child              
00 002cedcc 771a775d 002cedec 002cede8 772e124c kernel32!CreateFileW
1:009> du 002cedec 
002cedec  "C:\Windows\Globalization\Sorting"
002cee2c  "\sortdefault.nls"
1:009> *** wrong file
1:009> g
[...]
Breakpoint 0 hit
[...]
1:009> kb L1
 # ChildEBP RetAddr  Args to Child              
00 0043da18 5f9b5cf0 06a12e68 80000000 00000001 kernel32!CreateFileW
1:009> du 06a12e68 
06a12e68  "d:\temp\a.pdf"
1:009> gu
[...]
1:009> r eax
eax=000001cc
1:009> bp kernel32!readfile
1:009> bl
     0 e Disable Clear  771a167f     0001 (0001)  1:**** kernel32!CreateFileW
     1 e Disable Clear  771a3ef1     0001 (0001)  1:**** kernel32!ReadFile
1:009> bd 0
1:009> g
Breakpoint 1 hit
[...]
1:009> kb L1
 # ChildEBP RetAddr  Args to Child              
00 0043da44 5f9b74be 000001cc 0043db64 00000008 kernel32!ReadFile

谢谢!!你的回答完美地解决了我的问题!作为一个初学者,衷心感谢你多次帮助我解决这个问题。@xupeng:不客气。WinDbg很难学习,我很高兴能分享我的知识