gpt4 book ai didi

c++ - basic_string 分配器

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:28 25 4
gpt4 key购买 nike

我想知道这是做什么的:

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 的构造函数调用的方式类(class)。 v109是在堆栈上分配的内存,用于保存 std::string例如,第二个参数 "hello world" , 是用来初始化它的字符串。

在多个条件导致相同结果代码的情况下,编译器通常选择重用先前条件中的(等效)代码片段,以最小化生成的字节码的大小。 Hex-Ray 的反编译器插件通常使用 Comma-operator 显示它们直到版本 1.5 - 较新版本的反编译器有 a better understanding of such situations .

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;

关于c++ - basic_string 分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com