- UID
- 83152
注册时间2015-1-17
阅读权限10
最后登录1970-1-1
周游历练
TA的每日心情 | 擦汗 2016-2-28 18:22 |
---|
签到天数: 38 天 [LV.5]常住居民I
|
本帖最后由 Armboy2010 于 2015-1-27 11:09 编辑
我用MFC写了简单的demo
代码如下:
// 按钮单击事件
void CTestBtnClickDlg::OnBnClickedBtnClick()
{
CTime curTime = CTime::GetCurrentTime();
CString strTime = curTime.Format("%Y-%m-%d %H:%M:%S");
SetDlgItemText(IDC_EDIT_MSG, strTime);
}
编译选项选择静态链接到MFC,编译Release版本,OD载入,
设置断点SetDlgItemTextA,断下后反汇编代码如下:
00A5220C /$ 8BFF MOV EDI,EDI
00A5220E |. 55 PUSH EBP
00A5220F |. 8BEC MOV EBP,ESP
00A52211 |. 8379 68 00 CMP DWORD PTR DS:[ECX+68],0
00A52215 |. 75 15 JNZ SHORT TestBtnC.00A5222C
00A52217 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; /ControlID
00A5221A |. FF71 20 PUSH DWORD PTR DS:[ECX+20] ; |hWnd
00A5221D |. FF15 0468B600 CALL DWORD PTR DS:[<&USER32.GetDlgItem>] ; \GetDlgItem
00A52223 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
00A52226 |. 8901 MOV DWORD PTR DS:[ECX],EAX
00A52228 |. 5D POP EBP
00A52229 |. C2 0800 RETN 8
00A5222C |> 8B49 68 MOV ECX,DWORD PTR DS:[ECX+68]
00A5222F |. 8B01 MOV EAX,DWORD PTR DS:[ECX]
00A52231 |. 5D POP EBP
00A52232 \. FF60 70 JMP DWORD PTR DS:[EAX+70]
00A52235 8BFF MOV EDI,EDI
00A52237 /. 55 PUSH EBP ; 断在这里
00A52238 |. 8BEC MOV EBP,ESP
00A5223A |. 8379 68 00 CMP DWORD PTR DS:[ECX+68],0
00A5223E |. 75 13 JNZ SHORT TestBtnC.00A52253
00A52240 |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; /Text
00A52243 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |ControlID
00A52246 |. FF71 20 PUSH DWORD PTR DS:[ECX+20] ; |hWnd
00A52249 |. FF15 3466B600 CALL DWORD PTR DS:[<&USER32.SetDlgItemTe>; \SetDlgItemTextA
00A5224F |. 5D POP EBP
00A52250 |. C2 0800 RETN 8
00A52253 |> 8B49 68 MOV ECX,DWORD PTR DS:[ECX+68]
00A52256 |. 8B01 MOV EAX,DWORD PTR DS:[ECX]
00A52258 |. 5D POP EBP
00A52259 \. FFA0 88000000 JMP DWORD PTR DS:[EAX+88]
此时的栈内存如下:
0044F368 00A41FDC TestBtnC.00A41FDC
0044F36C 000003E9
0044F370 022C5A10 ASCII "2015-01-27 10:52:07"
0044F374 74B9B92B
0044F378 00000111
0044F37C 00B8EDB0 TestBtnC.00B8EDB0
0044F380 54C6FD57
0044F384 00000000
0044F388 022C5A10 ASCII "2015-01-27 10:52:07"
0044F38C 0044F50C 指向下一个 SEH 记录的指针
0044F390 00B63C08 SE处理程序
0044F394 00000000
0044F398 /0044F3A8
0044F39C |00A49117 返回到 TestBtnC.00A49117
0044F3A0 |00B8EDB0 TestBtnC.00B8EDB0
0044F3A4 |0044FA64
通过栈内存,我在地址022C5A10处下了内存写入断点,继续跑程序点击按钮,程序断了几次,
我跟了好久,就是找不到以下两行代码对应的反汇编代码:
CTime curTime = CTime::GetCurrentTime();
CString strTime = curTime.Format("%Y-%m-%d %H:%M:%S");
知道的大神,忘能指点一二,感激不尽!该例子程序打包在附件中了。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?加入我们
x
|