简单的调试目标程序
说明:
用于给OD调试使用的简单程序,只有一个TextEdit和两个Button. Textedit显示数值,两个Button分别实现增加和减少数值功能.经过测试,采用不同的数据存储方式,调试时的会出现直接地址和多级指针两种情况.
主要步骤:
- 创建MFC对话框应用程序(VS2010)
- 新建项目 -> Visual C++ -> MFC-> MFC应用程序(对话框应用程序)
- 添加一个Edit Control和两个Button,分别全名为IDC_Edit1, IDC_Button_Inc, IDC_Button_Dec.
- 采用不同的方法实现功能.
方法1:
添加控件变量m_EditValue关联IDC_Edit1: 类别Value, 变量类型int, 最小值0, 最大值1000.
BOOL CTest1Dlg::OnInitDialog()
{
...
this->m_EditValue = 100;
this->UpdateData(false);
...
}
void CTest1Dlg::OnBnClickedButtonInc()
{
// TODO: 在此添加控件通知处理程序代码
this->m_EditValue ++;
this->UpdateData(false);
}
void CTest1Dlg::OnBnClickedButtonDec()
{
// TODO: 在此添加控件通知处理程序代码
this->m_EditValue --;
this->UpdateData(false);
}
方法2:
添加控件变量如方法1. 声明全局变量 G_Value .
int G_Value = 100;
BOOL CTest1Dlg::OnInitDialog()
{
...
this->m_EditValue = G_Value;
this->UpdateData(false);
...
}
void CTest1Dlg::OnBnClickedButtonInc()
{
// TODO: 在此添加控件通知处理程序代码
G_Value ++;
this->m_EditValue = G_Value;
this->UpdateData(false);
}
void CTest1Dlg::OnBnClickedButtonDec()
{
// TODO: 在此添加控件通知处理程序代码
G_Value --;
this->m_EditValue = G_Value;
this->UpdateData(false);
}
- 调试结果
采用方法1生成文件后用CE扫描, 三级以上指针(未找到最后). 因为目标值存放在类的结构中, 需要根据类的定义和实例存放位置确定目标值的地址, 所以是多级指针.
采用方法2生成文件后用CE扫描, 首次扫描即可得到两个结果, 其中一个就是目标地址(绿色). 所得目标地址为全局变量G_Value的地址, 非绿色的是控件值地址. 可以通过修改结果值的方法验证: 1只修改目标地址值后, Edit1控件值不变, 但按下BUTTON后, 会在修改的值基础上变化.(如修改为80, 则按增加按钮后为81.); 修改非绿值按下BUTTON后, 不会影响显示.
- 建议用第二种方法生成文件作为调试目标
原因 —— 简单.