网络安全分析:PE编程实例之地址转换器
3个单选框中只能有一个是选中状态,为了记录哪个单选框是选中状态,在类中定义一个成员变量m_nSelect。对3个单选框,分别使m_nSelect值为1、2和3。下面来看主要的代码。 在单击“计算”按钮后,响应该按钮的代码如下: void CPeParseDlg::OnBtnCalc() { // TODO: Add your control notification handler code here DWORD dwAddr = 0; // 获取的地址 dwAddr = GetAddr(); // 地址所在的节 int nInNum = GetAddrInSecNum(dwAddr); // 计算其他地址 CalcAddr(nInNum, dwAddr); } 分别看一下GetAddr()、GetAddrInSecNum()和CalcAddr()的实现。 获取在编辑框中输入的地址内容的代码如下: DWORD CPeParseDlg::GetAddr() { char szAddr[10] = { 0 }; DWORD dwAddr = 0; switch ( m_nSelect ) { case 1: { GetDlgItemText(IDC_EDIT_VA, szAddr, 10); HexStrToInt(szAddr, &dwAddr); break; } case 2: { GetDlgItemText(IDC_EDIT_RVA, szAddr, 10); HexStrToInt(szAddr, &dwAddr); break; } case 3: { GetDlgItemText(IDC_EDIT_FILEOFFSET, szAddr, 10); HexStrToInt(szAddr, &dwAddr); break; } } return dwAddr; } 获取该地址所属的第几个节的代码如下: int CPeParseDlg::GetAddrInSecNum(DWORD dwAddr) { int nInNum = 0; int nSecNum = m_pNtHdr->FileHeader.NumberOfSections; switch ( m_nSelect ) { case 1: { DWORD dwImageBase = m_pNtHdr->OptionalHeader.ImageBase; (编辑:ASP站长网) |