2010-07-27 30 views
0

我需要用它們的原始源代碼替換分配器。我從PE導出表中提取導出的方法,並面對在原始源代碼中使用STL容器的奇怪冗長的分配器。即如果源代碼是:如何用實際源代碼替換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) 

我如何從上述冗長分配器原路返回到原來的源代碼? (類型定義增加更多尺寸。)

問候,

烏斯曼

回答

1

我想你的意思是你要能夠從導出表確定了更爲簡潔的類型名稱。標準分配器(std::allocator)是大多數標準容器類模板中的分配器參數的默認模板參數,因此您可以從模板特化中刪除整個分配器參數,以獲得相同類型的簡單表達式。

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) 
0

我相信你是在談論解碼錯誤信息?嘗試STLFilt

+0

起初我也認爲,但據我所知,他有一個實用程序可以從可執行文件中提取名稱。這些名字充斥着分配器的東西(他們應該是這樣),我想,他想擺脫它們。 – GManNickG 2010-07-27 18:27:48

+0

yeah definetly。 我想用我原來的源代碼替代那些分配器的東西。實際上,我需要在GUI上顯示這些類型和提取的方法(我從導出表中提取)或者說一些XML。因此,作爲用戶我不會承認這些分配器 – Usman 2010-07-27 19:00:36

+0

你不能有一個確切的替代。 STL容器中的分配器只是默認參數的一個示例。例如。 'std :: set '也會有一個'std :: less '默認順序。編譯之後,你是否已經知道是否提供了默認參數。這並不是說typedefs('std :: string'確實是'std :: basic_string ') – MSalters 2010-07-28 09:17:06