在 Win32-API 处中断以检查进程的行为
Break at Win32-API to inspect process's behaviors
我正在调试'smartgit for windows'。
我想知道它如何调用 'git'(命令它传递给 git)。我启动VS,附上smartgit的进程。
我怀疑它通过 windows 管道和 ReadFile
和 WriteFile
等其他 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]
中的地址时
我正在调试'smartgit for windows'。 我想知道它如何调用 'git'(命令它传递给 git)。我启动VS,附上smartgit的进程。
我怀疑它通过 windows 管道和 ReadFile
和 WriteFile
等其他 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]
中的地址时