- UID
- 76236
注册时间2014-6-15
阅读权限50
最后登录1970-1-1
感悟天道
 
TA的每日心情 | 奋斗 2025-1-14 00:10 |
---|
签到天数: 2293 天 [LV.Master]伴坛终老
|
发表于 2024-6-12 08:22:21
|
显示全部楼层
本帖最后由 lies2014 于 2024-6-12 08:41 编辑
最终结果是对的,但你在一些概念上还没有完全理解,以后换个场景可能还会混淆
首先,大白与调试器看到的应该是一样的,另一种意义上实际就是你在调试器动作的复现
那为什么这里会不同呢,因为你调试器中断的地址和大白不一致
大白里设置的是0x408423,属于用户空间,也就是你能在pdf.exe这个程序里能找到的代码
调试器你是中断在CreateWindowExA函数里面,也就是系统空间,这是Windows系统的DLL
用户空间的代码通过call调用了系统空间的函数,call外面和call里面的堆栈是不一样的
进入call执行完毕后还是要返回用户代码继续执行的,因此会把要返回的用户地址压入栈空间
你只要在0x408423下个断,看一下现在的堆栈,再F7进入call,就可以看到变化了
在大白里设置的存储器就应该是你在0x408423看到的,而不是F7后看到的
这是运行到0x408423的参数位置:
下面是F7后的参数位置:
然后就是指针和数据的问题,MSDN里对CreateWindowExA函数的参数定义是这样的:
HWND CreateWindowExA(
[in] DWORD dwExStyle,
[in, optional] LPCSTR lpClassName,
[in, optional] LPCSTR lpWindowName,
[in] DWORD dwStyle,
[in] int X,
[in] int Y,
[in] int nWidth,
[in] int nHeight,
[in, optional] HWND hWndParent,
[in, optional] HMENU hMenu,
[in, optional] HINSTANCE hInstance,
[in, optional] LPVOID lpParam
);
第3个参数LPCSTR就是指针类型,第4个参数DWORD是双字的数据
比如你要找一个人,指针就好像是一个门牌号,你要先找到这个门牌号才能找到人
所以你要对这个人干什么都是间接的,要通过 [门牌号] 来做出动作
而数据里面就是这个人,因此对他的动作就是直接上,不需要 [] 来转换
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
|