程序分析2-vec-list-map-MFC
Posted ltyandy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序分析2-vec-list-map-MFC相关的知识,希望对你有一定的参考价值。
第一个是指向自己指针。
第二个是指向结构体
第三个是元素个数
// 数据结构.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <vector> #include <list> #include <map> using namespace std; struct MyVector struct MyVector* pSelf; int* pDataStart; int* pDataEnd; int* pBufEnd; ; struct MyNode struct MyNode* pNext; struct MyNode* pPrev; int nData; ; struct MyList struct MyList* pSelf; struct MyNode* pRoot; int nNodeCount; ; void testVector() // 动态数组,数据存储在堆内存中 // 当元素发生改变之后,会动态增加内存。 vector<int> vecObj; vecObj.push_back(1); vecObj.push_back(2); vecObj.push_back(3); vecObj.pop_back(); vecObj.push_back(4); vecObj.push_back(5); vecObj.push_back(6); vecObj.push_back(7); //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ // 遍历vector for (size_t i = 0; i < vecObj.size(); i++) printf("vecObj[%d] = %d", i, vecObj[i]); //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ // 遍历vector vector<int>::iterator iter = vecObj.begin(); while (iter != vecObj.end()) int n = *iter; printf("vecObj i = %d", n); iter++; // 有临时对象产生 //++iter;// 无临时对象 //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ // 定义结构,操作vector MyVector* pVector = (MyVector*)&vecObj; int size = ((int)pVector‐>pDataEnd ‐ (int)pVector‐>pDataStart) / sizeof(int)) for (size_t i = 0; i < size; i++) //pVector‐>pDataStart[i] = 3; int n = pVector‐>pDataStart[i]; printf("元素=%d\\n", n); void testList() // 双向循环链表, 节点 list<int> listObj; listObj.push_back(1); listObj.push_back(2); listObj.push_back(3); listObj.pop_back(); listObj.push_back(4); //‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ MyList* pList = (MyList*)&listObj; int size = pList‐>nNodeCount; MyNode* pNode = pList‐>pRoot; while (pNode‐>pNext != pList‐>pRoot) pNode = pNode‐>pNext; int n = pNode‐>nData; printf("元素=%d\\n", n); struct MyMapNode struct MyMapNode* pLeft; struct MyMapNode* pParent; struct MyMapNode* pRight; int unknown; int nkey; int nValue; ; struct MyMap struct MyMap* pSelf; struct MyMapNode* pRoot; int nNodeCount; ; void enumMapNode(MyMapNode* pNode, MyMapNode* pRoot) if (pNode == pRoot) return; //printf("key=%d, value=%d\\n", pNode‐>nkey, pNode‐>nValue); enumMapNode(pNode‐>pLeft, pRoot); printf("key=%d, value=%d\\n", pNode‐>nkey, pNode‐>nValue); enumMapNode(pNode‐>pRight, pRoot); void testMap() map<int, int> mapObj; typedef pair <int, int> Int_Pair; mapObj.insert(Int_Pair(1, 0x11)); mapObj.insert(Int_Pair(2, 0x22)); mapObj.insert(Int_Pair(3, 0x33)); mapObj.insert(Int_Pair(4, 0x44)); mapObj.insert(Int_Pair(5, 0x55)); mapObj.insert(Int_Pair(6, 0x66)); MyMap* pMap = (MyMap*)&mapObj; MyMapNode* pNode = pMap‐>pRoot‐>pParent; enumMapNode(pNode, pMap‐>pRoot); //mapObj.erase(2); //mapObj.insert(Int_Pair(7, 0x77)); //mapObj.insert(Int_Pair(3, 0x55)); int main() testVector(); testList(); testMap(); getchar(); return 0;
CWinApp的派生类中的 InitInstance
CDialog的OnInitDialog
各种消息处理函数
分析MFC程序,我们应该去寻找特征: 同一个版本的MFC程序,特征应该一样。 寻找InitInstance
mov eax,dword ptr [edx] mov esi,esp
mov ecx,dword ptr [eax+58h] mov dword ptr [ebp‐24h],ecx mov edi,esp mov ecx,dword ptr [ebp‐24h]
寻找按钮点击的特征 2017
以上是关于程序分析2-vec-list-map-MFC的主要内容,如果未能解决你的问题,请参考以下文章