能力值:
( LV2,RANK:10 )
|
-
-
2 楼
006A1131 68 70C16C00 push asktao.006CC170 ; ASCII "xx_kk"
006A1136 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
006A113A 8BD8 mov ebx,eax
006A113C FF15 58136C00 call dword ptr ds:[<&MSVCP80.std::ba>; msvcp80.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
类似这样的代码 应该怎么分析?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是调用了STL的函数
|
能力值:
( LV8,RANK:130 )
|
-
-
4 楼
不是,模板实例化的结果
就是string::data
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢 ..这个函数不像函数 不好理解
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
请问如何分析出它的意思?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
给个明灯..
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
首先是最外层:
std::basic_string<X,Y,Z >::basic_string<X,Y,Z >
其中:
X = char
Y = std::char_traits<char>
Z = std::allocator<char>
std是STL的 namespace
显然这个是在调用 basic_string<X,Y,Z >的构造函数
这里
Y,Z是X确定定后basic_string的默认模版参数,
所以实际就是
basic_string<char>
这个正是 string
所以这里是调用
string("xx_kk")
|
能力值:
(RANK:260 )
|
-
-
9 楼
iicup已经解释得很清楚了。
我再多几句嘴,如果你不习惯C++的STL编程方式,别人用某个例子就事论事地讲,你也很难明白。“逆向”的的前提,至少是知道“正向”是如何工作的吧。
简单(但不严格)地说,std::basic_string<char>就是STL提供的的字符串,即std::string
而std::basic_string<char,std::char_traits<char>,std::allocator<char> >就是std::basic_string<char>的缺省模板参数展开形式。
std::basic_string<char,std::char_traits<char>,std::allocator<char> >::data写成简单的形式就是std::string::data
msvcp80.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >这个函数其实就是字符串的构造函数,可以理解为:std::string::string(const char *)
如果要深究string类中的data成员为何物,就需要研究STL源码了。可以去看侯俊杰《STL源码分析》。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
真的很感谢 iicup与书呆彭 的回答..
让我不再迷糊..真的很谢谢.
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
同样受教……支持下!
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
谢谢解惑...............
|
|
|