三大疑点
1)
假设我得到如下调用堆栈
user32.dll!_InternalCallWinProc@20() + 0x28 bytes
user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes
user32.dll!_CallWindowProcAorW@24() + 0x51 bytes
user32.dll!_CallWindowProcW@20() + 0x1b bytes
现在每个函数末尾提到的字节是什么?就像第一个语句一样,0x28 字节是什么。
2)如何在VS中的Windows系统dll上设置断点?
在windbg中我可以搜索Windows系统dll的特定函数
>x wininet!*funcA*
通过这个命令我可以获得这个函数的地址并可以放置断点。
我可以在 Visual Studio 中做同样的事情吗?
3)我没有dll的符号文件。我在反汇编中得到的调用堆栈是
7814XXX0 call dword ptr [__imp__WindowsFuncA@32 (781EXXXXh)]
What is __imp__
在上面的调用堆栈中?这是否意味着这个 Windows 函数挂接到了其他一些 dll 上?
1)它们是该堆栈帧中正在执行的指令相对于函数开头的字节偏移量。
2)在“新建断点”对话框中输入如下内容:
{,,user32.dll}_SendMessageW@16
哪里的16
是函数期望的参数字节数(在 Win32 中,这几乎总是参数数的 4 倍)。这W
指 API 的 Unicode 版本;使用A
如果您正在调试 ANSI 应用程序。
3) __imp__
引用 DLL 导入表 - 当前模块中的代码通过JMP
到真正的 Windows DLL 中,并且__imp__
符号指的是JMP
。这些JMP
位于进行调用的 DLL 或 EXE 的表中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)