Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在Win32 API上中断以检查进程的行为_Windows_Visual Studio_Debugging_Debug Symbols - Fatal编程技术网

Windows 在Win32 API上中断以检查进程的行为

Windows 在Win32 API上中断以检查进程的行为,windows,visual-studio,debugging,debug-symbols,Windows,Visual Studio,Debugging,Debug Symbols,我正在调试“smartgit for windows”。 我想知道它是如何调用“git”命令并传递给git的。我启动VS并附加smartgit的进程 我怀疑它通过windows管道和其他API(如ReadFile和WriteFile等)与git通信,所以在这些函数上设置断点 设置一些选项后,我勾选“仅我的代码”并删除符号设置中的所有排除模块,然后下载符号。我可以确保已加载“Kernel32.pdb”。 'smartgit.exe'Win32:已加载'Q:\Program Files x86\sm

我正在调试“smartgit for windows”。 我想知道它是如何调用“git”命令并传递给git的。我启动VS并附加smartgit的进程

我怀疑它通过windows管道和其他API(如ReadFile和WriteFile等)与git通信,所以在这些函数上设置断点

设置一些选项后,我勾选“仅我的代码”并删除符号设置中的所有排除模块,然后下载符号。我可以确保已加载“Kernel32.pdb”。 'smartgit.exe'Win32:已加载'Q:\Program Files x86\smartgit\bin\smartgit.exe'。模块是在没有符号的情况下构建的。 'smartgit.exe'Win32:已加载'C:\Windows\SysWOW64\ntdll.dll'。已加载符号。 'smartgit.exe'Win32:已加载'C:\Windows\SysWOW64\kernel32.dll'。已加载符号。 'smartgit.exe'Win32:已加载'C:\Windows\SysWOW64\KernelBase.dll'。已加载符号。 'smartgit.exe'Win32:已加载'C:\Windows\SysWOW64\user32.dll'。已加载符号。

_ReadFile@20: 765EF0C0 8B FF mov edi,edi 765EF0C2 55推式ebp 765EF0C3 8B EC mov ebp,esp 765EF0C5 6A FE推送0FFFFFEH 765EF0C7 68 C0 52 68 76推动766852C0h 但我还是在触发bps时看到了disasm代码视图。我确信我已经勾选了“显示源代码”选项

为什么??以及如何查看ReadFile的C代码,我想知道它的MartGit读写了什么。因此,我通过lpBuffer进行检查。

pdb文件不包含源代码。它可以包含如何将RVA地址映射到源文件/行的信息。但是,只有当您拥有这些源文件时,这些信息才有用。因为您没有windows系统DLL ntdll、kernel32、kernelbase.的源文件。。您无法在调试器中查看它的c/c++代码。关于源文件/行的常规信息从系统PDB中剥离,因为源文件无论如何都不存在以供下载。但是使用pdb文件,您可以查看内部函数和符号名称,而不仅仅是导出的符号-这已经是一个很大的优势,对调试非常有帮助


以防ReadFile-在这里您需要什么源代码?当您可以查看[esp+8]中的lpBuffer地址时,首先是转储中的指令765EF0C0,然后是[ebp+0xc]?

所需的二乘四并不总是很明显。用你自己的话描述一下你认为没有符号的模块是什么意思。@TanakaYasen-但你没有ntdll、kernel32、kernelbase的源文件。并且不能查看它的c/c++代码。但是ReadFile函数非常小,这里不需要sourcethx,您提醒我,当源代码更改时,断点将变得无效,因为从RVA到源代码的映射不正确。我知道[esp+offset]代表params和[eip]下面的call指令,因为调用函数总是编译为推送param3的asm序列;推送参数2;push param1调用_func。但令人困惑的是,偏移量与调用conventionstdcall/cdecl不同。我对这件事并不十分熟悉。即使熟悉,也是一份低效的工作。在哪里下载Kernel32.c的源代码与Kernel32.pdb兼容?@TanakaYasen-在哪里下载Kernel32.c的源代码-恐怕这是不可能的,谢谢大家。我发现Linux上的非官方实现kernel32.c wine不能与pdb兼容:我钩住api静态句柄WINAPI myCreateProcess…{HANDLE t=oldCreateProcesslpApplicationName、lpCommandLine、lpProcessAttributes、lpThreadAttributes、bInheritHandles、dwCreationFlags、lpEnvironment、lpCurrentDirectory、lpStartupInfo、lpProcessInformation;//在此处设置断点返回t;}通过一个称为Minhook的轻量级lib,就像MS的迂回路线一样,它被解决了。