CE 无法搜索中文字符串变量的解决办法

很久以前的问题,记得那是分析某个游戏的时候的事情了,当时想搜索游戏里的 “目的地” 这个字符串变量,结果发现在游戏里经过几次变量的变化后,变量存放的内存地址就会发生变化(也就是这个地址存储的值变成了乱码)目前猜测有两种可能:
1.变量没有找对。
2.游戏使用一个数组存放一些关键数据的 “地址” ,但是这个地址是动态的(每次数据变动都分配新的地址)。

先来验证第一种情况,我写了一个简单的 mfc 程序,代码如下:

static CString s;

void CTest_MFCDlg::OnBnClickedButton1()
{ 
	GetDlgItem(IDC_EDIT1)->GetWindowTextW(s);
}

void CTest_MFCDlg::OnBnClickedButton2()
{ 
	MessageBox(s,NULL);
}

《CE 无法搜索中文字符串变量的解决办法》

附加到 ce ,在文本框里输入几个字(要用中文,先不点击 “赋值给变量” 这个按钮),搜索对应的值:
《CE 无法搜索中文字符串变量的解决办法》
什么都没有找到 ~ (难道是勾选了 “fast scan” 快速扫描的原因 ?),取消勾选快速扫描,并选择扫描时暂停:
《CE 无法搜索中文字符串变量的解决办法》
依然没有 ! 难道是没有使用 Unicode 编码 ? 不可能,自己写的代码怎么会不知道编码方式?
《CE 无法搜索中文字符串变量的解决办法》
不服? 去掉勾选 Unicode 再搜搜试试 ?
《CE 无法搜索中文字符串变量的解决办法》
嗯 ~ 可恶 !《CE 无法搜索中文字符串变量的解决办法》不简单嘛… 冷静,是不是因为这个值没有被赋值给某个变量 ? 导致不在内存中存在的原因 ? 点击 “赋值给变量” 按钮再试试。
《CE 无法搜索中文字符串变量的解决办法》
果然还是不行,无所谓了我已经习惯了。嗯…刚刚搜索的是 4 个字,我现在只搜索 1 个字 “啊” 呢?(已经不考虑逻辑开始瞎猜了)。
《CE 无法搜索中文字符串变量的解决办法》
但事实发现瞎猜是有效的,搜索到了,为了控制变量,重启程序在不点 “赋值给变量” 按钮的情况下搜索 “啊”:
《CE 无法搜索中文字符串变量的解决办法》

没有问题,说明 ce 是否能搜索到数据和这个数据是否被赋值给一个变量没有关系,或者是它本身就已经默认被编辑器赋值给了一个对象都有可能,但是这不是我们考虑的范畴。为了看得更加直观,把所有的值都放到编辑区域,并修改变量的长度:
《CE 无法搜索中文字符串变量的解决办法》

发现可疑的地方: string 的长度已经增加了,为什么后面的 “啊啊啊” 没有显示出来?难道它们不是连在一起的?难道 C++ 语言的 String 本质上是一个 char[] 里面的元素在内存里这里存一个,那里存一个?虽然有疑心,但是不敢确定,暂且放一放。改变文本框内的值,观察这些数值的变化:
《CE 无法搜索中文字符串变量的解决办法》
真是稀奇百怪的什么都有啊,但是大部分是 “四” ,试一下修改 address ,看看这个 “四” 之前有没有内容:
《CE 无法搜索中文字符串变量的解决办法》

大部分修改之后都变成了乱码,甚至按照原来的地址再改回去,也变成了乱码! 说明这个方向走错了,如果继续下去的话只能越来越乱,打住。CE 里还有另一种搜索字符的办法,就是 Array list 字符数组,这种办法是不是可以奏效呢?先用工具查:https://www.sojson.com/hexadecimal.html 对应的 16 进制:
《CE 无法搜索中文字符串变量的解决办法》
这里注意,因为 windows 是采用 “大端存储” 高位存放在低位,所以在 ce 里输入的时候应该写成 “00 4e 8c 4e”:
《CE 无法搜索中文字符串变量的解决办法》
有数据,还是拉下来,改为 text 看看是不是 “一二”:
《CE 无法搜索中文字符串变量的解决办法》
没有问题,改变文本框内的值:
《CE 无法搜索中文字符串变量的解决办法》
有希望!依次重复以上操作,删除不符合的地址,最后得到了稳定的结果:《CE 无法搜索中文字符串变量的解决办法》

结论:CE 对中文搜索的功能还有一定的缺陷 ,在搜索字符串时需要使用 Array Of Bits 进行搜索,搜索时要注意 “大端存储” 的规则。

    原文作者:(-: LYSM :-)
    原文地址: https://blog.csdn.net/Simon798/article/details/97637609
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞