程序分析2-vec-list-map-MFC

Posted ltyandy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序分析2-vec-list-map-MFC相关的知识,希望对你有一定的参考价值。

vector :动态数组

技术图片

技术图片

我们可以通过ecx查看对象的内存

技术图片

技术图片

技术图片

 

 

list: 双向循环链表

 

技术图片

 

map: 树

 技术图片

 

第一个是指向自己指针。

第二个是指向结构体

第三个是元素个数

 

 技术图片

 

// 数据结构.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<intint> mapObj; 
    typedef pair <intint> Int_Pair; 
    mapObj.insert(Int_Pair(10x11));   
    mapObj.insert(Int_Pair(20x22));   
    mapObj.insert(Int_Pair(30x33));  
    mapObj.insert(Int_Pair(40x44));  
    mapObj.insert(Int_Pair(50x55));  
    mapObj.insert(Int_Pair(60x66));
    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; 

 

MFC程序

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的主要内容,如果未能解决你的问题,请参考以下文章

词法分析程序

java程序分析题?

词法分析程序

词法分析程序

在不通过分析器程序的情况下,有啥替代方法来分析您的 Web 应用程序?

词法分析程序