代码丢了?用搜索找出真相

简介: 代码丢了?用搜索找出真相

缘起

前几天,修复 bug 后,本地测试通过,提交代码到 tfs,关闭 bug。但是客户拿到程序后,效果依然不对。来来回回检查了好几遍,逻辑是正确的,本地验证通过了,代码也确实上传到 tfs 了,但是程序到客户手里,效果确实不对。如果是你,该如何调(shuai)查(guo)呢?

说明:本文只是分享一种排查问题的思路。

背景介绍

用一句话描述遇到的问题就是:在修改 bug 时,加了一句关键的 result.push_back(L"地下室外墙"),但是客户那里却没有看到新加的字符串。

排查思路

在我看来,这个问题有两种可能:

  1. 客户拿到的程序并没有包含最新的修复。
  2. 修复的逻辑有问题,只不过在本机测试的时候没有暴露出来。

因为整个修复逻辑很简单,不太可能出错,难不成还真有可能是第一种情况?该如何排查呢?

代码里的字符串一定会以某种格式保存在最终生成的程序文件里。如果客户拿到的程序里没有这个字符串,说明客户拿到的程序并没有包含最新的修复。

该怎么搜?

因为关键代码在 dll 文件中,不能直接使用 windbg 打开。否则就可以直接在 windbg 中使用 s -u 0x0 L?0xffffffffffffffff "地下室外墙" 搜索。没关系,还有十六进制编辑神器—— Hex Editor Neo。按 ctrl + f 调出搜索框,选择 UNICODE String 并输入要搜索的内容, 即可搜索。

search-unicode-string.png

说明:

  1. 上图之所以能搜到,是因为我新建了一个测试程序,里面包含了相关的字符串。在客户机器上有问题的 dll 中并没有搜索到的。
  2. Hex Editor Neo 非常好用,但不是免费软件(有免费版本)。欢迎推荐更好用的十六进制编辑工具。

More

因为我知道要搜索的字符串是 UNICODE 编码的,所以可以按 UNICODE String 进行搜索。如果在不知道编码的情况下该怎么搜索呢?

可以产生一个既包含目标字符串又包含标记字符串的测试字符串,通过搜索标记字符串来找到目标字符串在程序中的字节码。可以编写如下测试代码:

int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << L"test地下室外墙test1test2test3!" << std::endl;
    return 0;
}

在生成的程序中,分别尝试以各种编码类型搜索关键字 test1test2test3 ,这样就可以找到目标字符串在最终程序中的字节码了。

search-specific-string.png

有了这个字节码,就可以大概猜出来是什么编码了,或者既然已经拿到对应的字节码,可以直接根据字节码搜索。

总结

善用搜索工具,也许会有意想不到的效果。

相关文章
|
6月前
|
搜索推荐 定位技术 SEO
360搜索引流怎么样?小马识途建议试试这七种方法
小马识途分享360搜索引流技巧:关键词优化提升SEO排名;创建360百科增加品牌曝光;地图注册便于客户查找;参与360问答互动引导流量;利用快资讯发布内容;上传360文库满足用户需求;360推广快速获取流量。多种方式结合,注意效果监测与优化,以赢得市场优势。
|
数据采集 算法 搜索推荐
谷歌关键词排名掉了怎么回事?
答案是:因为你做的外链或内容都只是你觉得所谓的“优质”。 搜索引擎算法更新 常见算法变动 谷歌经常更新其搜索算法,旨在提供更为准确的搜索结果给用户。 这些变动可能会影响到你网站的排名。 了解最新的算法更新,帮助你更好地调整策略。 应对方法 适应算法的变化是关键。 密切关注谷歌官方的通告和SEO社区的讨论,从中获取有关新算法的详细信息,并相应调整你的Google优化策略。
86 0
谷歌关键词排名掉了怎么回事?
|
数据采集 搜索推荐 安全
谷歌搜索留痕快速收录怎么实现?
答案是:通过GPC爬虫池技术实现的。 在搜索引擎优化(SEO)领域,快速收录是许多网站主人追求的目标。 而在谷歌搜索引擎中,搜索留痕快速收录成为了一种重要的实现途径。 以下内容详细介绍了如何实现谷歌搜索留痕快速收录。
160 0
谷歌搜索留痕快速收录怎么实现?
|
存储 搜索推荐 NoSQL
抖音是怎么做到不重复推荐内容呢?
抖音是怎么做到不重复推荐内容呢?
谷歌搜索留痕怎么做?有没内容限制?
因为量很大,比如我生成100万个页面,总会有几千甚至几万收录的,当然有一个前提是,你必须有自己的蜘蛛池。
490 0
谷歌搜索留痕怎么做?有没内容限制?
怎样才能让百度搜索到自己的csdn博客?
怎样才能让百度搜索到自己的csdn博客?
142 0
怎样才能让百度搜索到自己的csdn博客?
|
算法 搜索推荐 程序员
再也不担心用不好二分法了,因为我找到了"作弊"的接口
导读:算法是程序的灵魂,而复杂度则是算法的核心指标之一。为了降低复杂度量级,可谓是令无数程序员绞尽脑汁、甚至是摧枯秀发。一般而言,若能实现对数阶的时间复杂度,算法效率往往就已经非常理想。而实现对数阶的常用思想莫过于二分。 二分常有,好用的二分并不常有。while条件是lo<hi还是lo<=hi?分支判断mid是+1还是-1还是仍然取值mid?最后return哪个值?如果目标序列不是严格递增又该怎么处理?想想都不禁让人敬而远之。幸运的是,在python语言中,已经内置了成熟的二分函数。
136 0
再也不担心用不好二分法了,因为我找到了"作弊"的接口
|
索引
别只会搜日志了,求你懂点检索原理吧(四)之 初阶检索玩法
别只会搜日志了,求你懂点检索原理吧(四)之 初阶检索玩法
150 0
别只会搜日志了,求你懂点检索原理吧(四)之 初阶检索玩法
|
SQL 存储 自然语言处理
别只会搜日志了,求你懂点检索原理吧(五)之 高阶检索玩法
别只会搜日志了,求你懂点检索原理吧(五)之 高阶检索玩法
207 0
别只会搜日志了,求你懂点检索原理吧(五)之 高阶检索玩法
|
算法 PHP
几句话描述简单算法——排序与搜索
准备大量的木桶,用木桶的标号(数组下标)作为数据,按照木桶标号的顺序进行排序。
几句话描述简单算法——排序与搜索