在 Win32-API 处中断以检查进程的行为

Break at Win32-API to inspect process's behaviors

我正在调试'smartgit for windows'。 我想知道它如何调用 'git'(命令它传递给 git)。我启动VS,附上smartgit的进程。

我怀疑它通过 windows 管道和 ReadFileWriteFile 等其他 API 与 git 通信,因此在这些函数处设置断点。

设置一些选项后,我勾选'Just My Code'并删除符号设置中的所有排除模块,然后我下载符号。我可以确保 'Kernel32.pdb' 已加载。 'smartgit.exe' (Win32): Loaded 'Q:\Program Files (x86)\SmartGit\bin\smartgit.exe'. Module was built without symbols. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Symbols loaded. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Symbols loaded. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Symbols loaded. 'smartgit.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Symbols loaded.

_ReadFile@20: 765EF0C0 8B FF mov edi,edi<br> 765EF0C2 55 推 ebp<br> 765EF0C3 8B EC mov ebp,esp<br> 765EF0C5 6A FE 推 0FFFFFFFEh<br> 765EF0C7 68 C0 52 68 76 推 766852C0h 但当 bps 被触发时,我仍然得到了 disasm 代码视图。我很确定我已经勾选了 'Show Source Code' 选项。

为什么?以及如何查看ReadFile的C代码,我想知道它(smartgit)读写的是什么。所以我通过 lpBuffer.

检查

pdb 个不包含源代码的文件。它可以包含如何将 RVA 地址映射到源 file/line 的信息。但此信息只有在您拥有此源文件时才有用。因为你没有 windows 系统 dll(ntdll、kernel32、kernelbase..)的源文件,你无法在调试器中查看它 c/c++ 代码。并且有关源 files/lines 的常用信息已从系统 pdbs 中删除 - 因为无论如何都不存在可供下载的源文件。但是使用 pdb 文件,您可以查看内部函数和符号名称(不仅是导出的符号)——这已经是非常有利于调试的优势了。

万一 ReadFile - 您需要什么源代码?当您可以在第一条指令(765EF0C0 在您的转储中)然后在 [ebp+0xc] ?

中查看 [esp + 8] 中的地址时