如何用实际源代码替换stl的分配器

时间:2010-07-27 18:09:47

标签: c++ reverse-engineering portable-executable allocator

我需要用原始源代码替换allocator。我从PE导出表中提取导出的方法,并面对奇怪的冗长分配器,其中STL容器在原始源代码中使用。即如果源代码是:

   typedef std::list<std::basic_string<_TCHAR> > TokenList;
   EXPORTS_API const TokenList& getLiteralList( );
从我得到的导出表

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short>,class
 std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned 
short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void)

如何从上面冗长的分配器回溯到原始源代码? (typedef增加了更多的大小。)

此致

乌斯曼

2 个答案:

答案 0 :(得分:1)

我认为您的意思是希望能够从导出表中确定更简洁的类型名称。标准分配器(std::allocator)是大多数标准容器类模板中allocator参数的默认模板参数,因此您只需从模板特化中删除整个allocator参数,即可得到相同类型的简单表达式。 / p>

E.g。

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short>,class
std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned 
short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void)

变为

std::list<class std::basic_string<unsigned short, std::char_traits<unsigned short> > > 
const & __thiscall CExpressionTokenizer::getLiteralList(void)

答案 1 :(得分:0)

我相信你在谈论解码错误信息?试试STLFilt