美文网首页
std::map在内存中的结构(2)

std::map在内存中的结构(2)

作者: 爱钓鱼的饭桶骑士 | 来源:发表于2021-01-24 12:56 被阅读0次

        代码Release编译后将exe拖到OD中调试,生成如下汇编代码:

    push ebp    ;函数头

    mov ebp,esp    ;保存esp指针

    and esp,-0x8    ;跳转esp指针

    sub esp,0x10    ;开辟4个DWORD空间用以存储变量

    lea eax,dword ptr ss:[esp]    取当前esp的地址

    mov dword ptr ss:[esp],0x1     ;置当前esp指向的内存地址为0x00000001(因为是用dword长度赋值)----这里是 map的key值

    push eax    将eax加入堆栈

    lea eax,dword ptr ss:[esp+0xC] 取esp+0xc的地址给eax

    mov dword ptr ss:[esp+0x8],TestStru.00A531BC  ;  TestStru.00A531BC是char* "1" 的内存地址,将字符串1的头地址放于esp+0x8中(字符串,顾名思义就是字符数组,一般指\0结尾的字符数组)----这里是 map的value值

    push eax    将eax加入堆栈

    call TestStru.00A51200  调用map的insert方法

    lea eax,dword ptr ss:[esp] 同理

    mov dword ptr ss:[esp],0x2 同理 这里是 map的key值

    push eax 同理

    lea eax,dword ptr ss:[esp+0xC] 同理

    mov dword ptr ss:[esp+0x8],TestStru.00A531C0  ;  12 同理 这里是 map的value值

    push eax 同理

    call TestStru.00A51200 同理

    lea eax,dword ptr ss:[esp] 同理

    mov dword ptr ss:[esp],0x3 同理 这里是 map的key值

    push eax 同理

    lea eax,dword ptr ss:[esp+0xC] 同理

    mov dword ptr ss:[esp+0x8],TestStru.00A531C4  ;  123 这里是 map的value值

    push eax  

    call TestStru.00A51200

    mov ecx,dword ptr ds:[<&MSVCP140.std::cout>]  ;  msvcp140.std::cout  这里开始调用cout函数,下面的不是我们分析的点,故跳过。

    call TestStru.00A51310

    xor eax,eax

    mov esp,ebp

    pop ebp

    retn

    相关文章

      网友评论

          本文标题:std::map在内存中的结构(2)

          本文链接:https://www.haomeiwen.com/subject/rplmzktx.html