首页
社区
课程
招聘
[求助]C++逆向list的问题
发表于: 2015-11-17 16:00 4292

[求助]C++逆向list的问题

2015-11-17 16:00
4292
逆向一段C++代码如下:
    do
    {
      v3 = (const sagem_bio::fe::ElementaryTemplate **)v2;
      v4 = operator new(0x20uLL);
      if ( v4 != -16 )
      {
        *(_QWORD *)(v4 + 16) = *((_QWORD *)v2 + 2);
        *(_DWORD *)(v4 + 24) = *((_DWORD *)v2 + 6);
      }
      std::_List_node_base::hook((std::_List_node_base *)v4, (sagem_bio::fe::ElementaryTemplate *)((char *)this + 24));
      v2 = *(sagem_bio::fe::ElementaryTemplate **)v2;
    }
    while ( (const sagem_bio::fe::ElementaryTemplate *)((char *)a2 + 24) != *v3 );

这个do....while循环实际实现的是一个List或者类似与list的结构,我自己写了个list反汇编的代码如下:

  for ( *(_QWORD *)(v3 + 32) = *(_QWORD *)(v2 + 32); v4 != a2 + 24; v4 = *(_QWORD *)v4 )
  {
    v5 = operator new(0x18uLL);
    if ( v5 != -16 )
      *(_DWORD *)(v5 + 16) = *(_DWORD *)(v4 + 16);
    LODWORD(v3) = std::__detail::_List_node_base::_M_hook(v5, a1 + 24);
  }

可以看到代码中的区别有2点:
1.std::_List_node_base::hook和std::___detail::_List_node_base::_M_hook
2.源码中每次循环添加2个元素,而我自己写的list中每次添加一个元素。
3.红色字体部分,开辟的空间大小不一样

请高手帮我分析下,源码中这个是list类型吗,为什么有std::_List_node_base::hook和std::___detail::_List_node_base::_M_hook之区别,源码可能是什么样的结构呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 92
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
c++ 的 std::list 实现从来没有标准的。
2015-11-17 19:32
0
雪    币: 8201
活跃值: (2706)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用模板不熟,逆用模板的比较蛋疼
2015-11-17 21:48
0
雪    币: 2332
活跃值: (3809)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
1.你确定你的第一段代码和第二段代码出自同一个编译器?同一个版本的STL?
2.你确定你的List使用的是同一个Allocator?
3.你确定你的List构造时的第一个模板参数类型是相同的?
2015-11-24 14:49
0
游客
登录 | 注册 方可回帖
返回
//