当前位置: 首页 > 知识库问答 >
问题:

javascript - linux bin文件部分内容异常清空,请问有好的方式排查?

袁骏祥
2024-03-21

linux unzip bin文件二进制形式打开发现中间有一段内容被清空,为全0x00,怀疑是程序指针影响的,请问有什么比较好的排查方式,产品代码大概30+万行
已做努力:
正常版本和异常版本的unzip在文件访问时间、修改时间、文件属性修改时间是一致的,故从这几个时间无法反推是什么功能代码影响的
/bin # stat unzip
File: unzip
Size: 120648 Blocks: 236 IO Block: 4096 regular file
Device: 1f07h/7943d Inode: 1028 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-03-19 22:26:54.000000000 +0800
Modify: 2021-10-20 14:57:13.000000000 +0800
Change: 2024-03-19 22:26:54.000000000 +0800

希望能求助到一种切实有效便捷的排查方式

补充说明:
1.两个unzip(正常和异常)所在的版本是同一版本,分别在A和B环境上,A和B环境运行了不同的功能(暂不清楚),A环境的unzip文件正常,B环境的unzip文件异常
2.寻求一种定位方式快速找到对应代码或者相关修改痕迹

共有1个答案

仉昱
2024-03-21

在Linux环境下,对于二进制文件(如.bin文件)的内容异常清空问题,尤其是当文件访问、修改和属性修改时间一致时,排查工作可能会变得复杂。由于你的产品代码规模较大(30+万行),以下是一些建议的排查方式:

  1. 版本控制系统(如Git):

    • 如果你的项目使用版本控制系统(如Git),可以比较正常版本和异常版本之间的差异。通过git diff命令,你可以查看哪些文件或代码块在修改时间之后发生了变化。
    • 对于二进制文件,这可能不太有用,但如果你之前有编译的中间文件或构建日志,它们可能提供有关何时和为何构建过程可能出错的线索。
  2. 代码审查:

    • 审查那些可能影响二进制文件生成过程的代码部分。特别关注那些与文件写入、编译选项或构建脚本更改相关的部分。
    • 使用静态代码分析工具,以识别可能的编程错误或逻辑错误。
  3. 编译日志:

    • 检查编译日志,查找可能在编译过程中产生的任何警告或错误。这些可能表明某些代码没有被正确编译或链接。
  4. 构建脚本:

    • 审查构建脚本(如Makefile, CMakeLists.txt等),确保没有不恰当的命令或选项,这些可能导致二进制文件的内容被意外更改。
  5. 反汇编和调试:

    • 使用反汇编工具(如objdump)检查二进制文件的反汇编输出,以查找可能的不正常代码段或跳转。
    • 使用调试器(如gdb)在二进制文件上设置断点,并尝试执行,以查看是否有任何异常行为。
  6. 二进制比较工具:

    • 使用二进制比较工具(如bdiffvimdiff的二进制模式)来比较正常和异常的二进制文件,以可视化地找出差异。
  7. 内存检查工具:

    • 如果怀疑内存损坏或指针错误,使用内存检查工具(如valgrind)来运行程序,并检查是否有内存泄漏或非法内存访问。
  8. 依赖库和静态库:

    • 检查项目依赖的库文件,确保它们没有被意外修改或损坏。
    • 如果项目使用了静态库,请检查这些库文件是否有任何异常。
  9. 环境差异:

    • 检查编译和运行时环境的差异,如编译器版本、操作系统版本、库版本等。
  10. 持续集成/持续部署(CI/CD):

    • 如果项目使用了CI/CD流程,检查构建历史记录,查找可能的构建失败或异常。

在缺乏具体上下文和错误重现步骤的情况下,上述建议可能需要根据你的实际情况进行调整。如果问题仍然难以解决,可能需要考虑使用专业的二进制分析工具或寻求具有深入Linux二进制分析和调试经验的专业人士的帮助。

 类似资料:
  • 本文向大家介绍Android清空应用内部文件缓存,包括了Android清空应用内部文件缓存的使用技巧和注意事项,需要的朋友参考一下 Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用内部缓存主要包含以下几大模块: 一、清除应用本地所有数据库缓存 二、

  • 本文向大家介绍PHP实现批量清空删除指定文件夹所有内容的方法,包括了PHP实现批量清空删除指定文件夹所有内容的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现批量清空删除指定文件夹所有内容的方法。分享给大家供大家参考,具体如下: cleancache.php: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP基本语法入门教程》、《php面向对

  • 问题内容: 是否可以获取文档中CSS文件的全部文本内容?F.ex: 我不是真的通过document.styleSheets获取所有CSS规则,还有另一种方法吗? 更新: 当然有ajax选项,我感谢给出的答案。但是似乎没有必要使用已经在浏览器中加载的ajax重新加载文件。因此,如果有人知道提取当前CSS文件的文本内容的另一种方法(不是CSS规则),请发表! 问题答案: 如果样式表包含在同一个域中,则

  • 我想从Perl向REST API服务发出一个POST请求。作为POST表单参数,服务需要一个多部分编码的文件。 我写了上面的代码。但是显然REST服务器无法理解POST请求,因为我只将文件路径发送到REST服务,而不是多部分编码的文件内容。有人能告诉我如何使文件多部分编码并将其作为POST请求发送到REST服务,而REST服务期望多部分编码的文件作为表单参数吗? 作为补充说明,我实际上想编写与下面

  • 我使用spring boot来开发我的系统,但是当我上传一个超过1MB的文件(使用多部分文件类型)时,我得到了这个例外。有人能给我解释一下吗?谢谢 java.lang.IllegalStateException:多部分Mime部分文件超过了org.eclipse.jetty.util.multipartInputStreamParser$Multipart.write(multipartInput

  • 本文向大家介绍Linux文件清空的五种方法总结分享,包括了Linux文件清空的五种方法总结分享的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍的是Linux文件清空的五种方法,下面话不多说,来看看详细的介绍吧。 1、使用重定向的方法 2、使用true命令重定向清空文件 3、使用cat/cp/dd命令及/dev/null设备来清空文件 4、使用echo命令清空文件 5、使用truncate命令