C++手稿:std::string

字符串在很多编程语言中已经成为基本数据类型,C语言中我们使用char*来手动申请和维护字符串, 在C++中,可以使用std::string来方便地创建和操作字符串。

string是一个模板类,它有basic_string<T>定义:

typedef basic_string<char> string;

C++的string可以通过成员方法c_str()转换为C语言的char*

参考文档:cplusplus.com/string

初始化与赋值

string有两个常用的构造函数:

// 用一个C字符串构造
string str("hello");
// 等价于
string str = "hello";

也可以用N个同样的字符来构造字符串:string str2(8, 'x')

在C0x标准中,std::to_string可以将很多类型转换为一个string,可以代替itoa,例如:

string str = to_string(123);

string构造函数不接受charint类型。

字符串可以直接互相赋值,内存会自动拷贝和销毁,我们大可不必管它。对于单个字符赋值可以使用下标运算符:

for(int i=0;i<str.length(); i++){
    str[i] = 'a';
}

与多数class类似,string也提供了swapstr1.swap(s2)将会交换二者的值。

运算符支持

有通用运算符支持的数据类型往往更容易理解和操作,其中最讨人喜欢的莫过于+运算符:

str += str2;
str = str + "hello";

当然,你也可以直接调用append方法:str.append(str2)

除了+string还支持一系列的比较运算符:<==><=>=!=

当然,你仍然可以直接调用compare方法:str1.compare(str2)str1小则会返回-1

长度

  • 字符串为空
    • empty():返回是否为空。
    • clear():清空字符串。
  • 字符串长度
    • length():等效于size(),返回字符串长度。
    • resize(10, 'x'):改变长度,如果超过了原有长度,后面补x,第二个参数默认值为null。
  • 字符串内存
    • capacity():无需再次申请内存可存放的字符数。
    • reserve(10):申请10字符的内存,通常在大量的insert前先reserve一下,避免多次申请内存。

查找

  • str.find("ll"):字符串llstr中第一次出现的下标,未找到为string::npos
  • str.rfind("ll"):同上,从右向左查找。
  • str.find("ll", 3):从下标3开始查找。

修改

  • erase(5):去掉下标5开始的所有字符。
  • replace(2, 3, "ll"):下标2开始的3个字符换成"ll"
  • insert(2, "ll"):下标2处插入"ll"

流处理

在C++中,标准输入输出、文件、字符串都可以作为一个流,来接受输入或者输出。 在C++中字符串流也是格式化输出的一种常用手段。

string input("test 123");
istringstream sinput(input);

string str;
int i;
sinput >> str >> i;

ostringstream soutput;
soutput << str << i;
cout<< soutput.str();
// test123
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值