能力值:
( LV2,RANK:10 )
|
-
-
2 楼
std::string 本质上是一个结构体,不同stl版本实现不一样。需要根据实际情况读取。下面是我常遇到的 struct std::string { char buffer[0x10]; // 如果字符串小于0x10就会存放这里 int end; //结束的位置 int start; //字符串开始的位置 };
struct std::string { char *pData; int tmp[3]; int size; int capacity; };
struct std::string { char *pData; }
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
楼上正解 对着结构体前四个地址找就完了 大概率data地址就在 前四个地址中 一眼就能看出来 有时候
|
能力值:
( LV1,RANK:0 )
|
-
-
4 楼
去分析std::string 里面的char*的偏移地址。
一般来说操作std::string 的时候编译后的代码是去操作char*的地址,你这样去找:去在反汇编里面去寻找这个std::string 的操作,就能大概找到char*的偏移地址。
比如某个地方在对std::string 读值,那么编译后的汇编一眼就能看到真正的char*偏移。
最后于 2021-10-8 21:34
被mb_hgrbqfun编辑
,原因:
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
5f1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9K6c8W2)9#2k6W2)9#2k6X3u0A6P5W2)9K6c8p5#2*7g2e0q4a6c8r3E0%4e0g2c8k6y4p5!0m8i4K6y4p5i4K6y4p5i4K6t1$3j5h3#2H3i4K6y4n7L8h3W2V1i4K6y4p5x3U0t1@1y4K6b7^5x3K6R3H3x3#2)9J5y4X3q4E0M7q4)9K6b7X3W2V1P5q4)9K6c8o6q4Q4x3U0k6S2L8i4m8Q4x3@1u0K6L8W2)9K6c8o6m8V1y4$3x3^5x3h3c8X3z5h3j5J5x3U0V1^5j5K6V1^5j5K6j5^5y4e0q4V1y4e0c8U0k6r3j5K6k6o6M7I4i4K6t1$3j5h3#2H3i4K6y4n7j5$3S2C8M7$3#2Q4x3@1c8X3j5K6q4W2x3K6p5@1j5$3y4T1y4U0W2T1z5o6g2S2j5K6j5J5k6e0l9#2z5o6N6S2k6X3q4W2y4o6t1I4j5e0t1J5x3U0W2U0y4U0m8S2z5e0N6W2k6o6M7H3x3e0V1@1x3o6f1^5j5K6t1&6k6o6c8S2j5h3x3H3x3U0k6V1j5X3q4T1x3$3y4X3y4e0m8T1j5K6W2T1i4K6t1$3j5h3#2H3i4K6y4n7N6r3!0C8k6h3&6Q4x3@1b7J5x3o6x3@1x3U0j5&6y4o6R3J5i4K6t1$3j5h3#2H3i4K6y4n7L8r3q4F1k6#2)9K6c8s2A6Z5i4K6g2X3b7@1&6Q4x3U0y4J5k6l9`.`. 可以看下这个
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
较长字符串和较短字符串内存分布是不一样的,要进行一下判断,下面是从某位大佬那里学来的: function readStdString(str){ const isTiny = (str.readU8() & 1) == 0; if(isTiny){ return str.add(1).readUtf8String(); } return str.add(2*Process.pointerSize).readPointer().readUtf8String(); }
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
Memory.readCString是针对c风格字符串 std::string准确来说是cpp的一个类 定义在标准模版库中 需要根据类的结构再做进一步解析 不能简单地read
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
chmlqw
std::string 本质上是一个结构体,不同stl版本实现不一样。需要根据实际情况读取。下面是我常遇到的
struct std::string
{
char buffer[0x10]; ...
大佬说的太有帮助了,我用readStdString这个函数可以打印指针_print(std::string *str), 用复分析结构的方法打印了引用_print(std::string &str)
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
 你可以找app内的c_str()函数,然后把你的对象作为this指针参数去调用,得到的就是正常的char*了
|
能力值:
( LV1,RANK:0 )
|
-
-
11 楼
liuxucau
较长字符串和较短字符串内存分布是不一样的,要进行一下判断,下面是从某位大佬那里学来的:
function readStdString(str){
const isTiny = (str.r ...
太强了大佬
|
|
|