-
-
[求助]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直播授课