basic_string allocator
basic_string allocator
我想知道这是做什么的:
std::basic_string<char, std::char_traits<char>, std::allocator<char>>::
basic_string<char, std::char_traits<char>, std::allocator<char>>
(&myText, "hello world");
我的第一个猜测是它将"hello world"分配给myText
变量如果这是真的,那么在这种情况下它有什么作用:
if ( v106 == v67 ||
std::basic_string<char, std::char_traits<char>, std::allocator<char>>::
basic_string<char, std::char_traits<char>, std::allocator<char>>
(&v109,"program"), v137 = 1)
{
BYTE3(v95) = 0;
}
这不是一个真正的条件...
我想这是 Hex-Ray 的 IDA 反编译器插件的输出,对吗?这是它显示 std::string
类构造函数调用的方式。 v109
是在堆栈上分配的用于保存std::string
实例的内存,而第二个参数 "hello world"
是用于初始化它的字符串。
在多个条件导致相同结果代码的情况下,编译器通常会选择重用先前条件中的(等效)代码片段,以最小化生成的字节码的大小。Hex-Ray 的反编译器插件经常使用逗号运算符显示它们,直到版本 1.5 - 新版本的反编译器可以更好地理解这种情况。
if (v106 == v67)
BYTE3(v95) = 0;
std::basic_string<char, std::char_traits<char>,
std::allocator<char>>
::basic_string<char,
std::char_traits<char>,
std::allocator<char>>(&v109,"program");
v137 = 1;
BYTE3(v95) = 0;
这更有可能看起来像实际来源。将巨大的std::basic_string<...>
结构替换为简单的std::string
声明使其更具可读性。
if (v106 == v67)
BYTE3(v95) = 0;
std::string v109("program");
v137 = 1;
BYTE3(v95) = 0;
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 使用char类型将decimal转换为string,将string转换为decimal
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 将向量解析<string>为字符串
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 如何更改大小(std::string)
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- std::string 的对象真的可以移动吗?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- <string> 使用 for 循环写入向量
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串