改写二进制文件

以下是一些常见的方法和工具:

1. 使用十六进制编辑器

十六进制编辑器 是最直接的工具之一,用于查看和编辑二进制文件中的数据。它允许你以十六进制格式查看和修改文件内容。

  • 常见十六进制编辑器
    • HxD(Windows)
    • Hex Fiend(macOS)
    • GHex(Linux)
    • Bless(Linux)

步骤

  1. 打开十六进制编辑器。
  2. 加载你要修改的二进制文件。
  3. 以十六进制或 ASCII 格式查看文件内容。
  4. 修改需要更改的字节。
  5. 保存文件。

2. 使用 xxd 命令(Linux)

xxd 是一个在 Linux 上将二进制文件转换为十六进制格式的工具,也可以用来将十六进制数据转换回二进制格式。

示例

  1. 查看二进制文件的十六进制表示:
    xxd filename.bin 
  2. 将修改后的十六进制数据转换回二进制:
    xxd -r -p hexfile.txt filename.bin 
    其中 hexfile.txt 是包含十六进制数据的文件。
    xxd -p hexfile.txt.bin > hexfile.txt

示例

#include <stdio.h>int main() {char p[] = "hello world";puts(p);return 0;
}
cc test.c -o a.out
xxd -p test.c > test.txt

 修改 "he" 为 "HE" 即 "6865" 为 "4845"

05faf32c0c2743688b42bfd6ad12056b.png

然后

xxd -r -p test.txt > ./a.out
#执行./aout
./a.out

 065899ff60ac4eb3938ea8c0a871ff39.png

3. 使用 dd 命令(Linux)

dd 是一个强大的命令行工具,用于低级别的文件操作,可以用来读取和写入二进制数据。

示例

  1. 从文件中提取部分数据:

    dd if=filename.bin of=part.bin bs=1 skip=10 count=5 

    其中 skip=10 是跳过前10个字节,count=5 是读取5个字节。

  2. 将数据写入到文件中:

    dd if=part.bin of=filename.bin bs=1 seek=10 conv=notrunc 

    其中 seek=10 是从第10个字节开始写入,conv=notrunc 确保不会截断目标文件。

4. 使用编程语言

如果你需要更复杂的操作,可以使用编程语言(如 Python、C++)来修改二进制文件。

Python 示例

with open('filename.bin', 'r+b') as f:f.seek(10) # 跳到第10个字节f.write(b'\xFF') # 写入一个字节的值 

C++ 示例

#include <fstream>int main() {std::fstream file("filename.bin", std::ios::in | std::ios::out | std::ios::binary);if (file.is_open()) {file.seekp(10);  // 跳到第10个字节file.put(0xFF);  // 写入一个字节的值file.close();}return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 根据关键字匹配数组项

要在JavaScript数组中根据关键字匹配项&#xff0c;可以使用filter方法结合一个测试函数。以下是一个示例代码&#xff0c;定义了一个函数findByKeyword&#xff0c;该函数接受一个数组和一个关键字&#xff0c;然后返回一个新数组&#xff0c;其中包含与关键字匹配的所有项。 …

【LabVIEW学习篇 - 16】:文件操作

文章目录 CSV文件CSV写入CSV读取 TXT文件txt写入txt读取 INI文件INI文件写入INI文件读取 CSV文件 .csv (Comma-Separated Values&#xff09;是逗号分隔值文件格式&#xff0c;有时也称之为字符分隔值&#xff0c;因为分隔符也可以不是逗号(最常见的是逗号和制表符)&#xff0…

(一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别

🍂1、不说废话,现象展示 🍃图片识别 🍃视频识别 自己训练样本 十分简易快速 opencv级联ha

springboot启动时替换配置参数

SpringBoot启动时配置参数替换 一.背景 SpringBoot项目启动的时候&#xff0c;在不使用配置中心等的前提下或者有公司强制使用指定的“密码箱”情况下&#xff0c;需要远程获取关键配置信息&#xff0c;比如数据库密码&#xff0c;则需要在项目启动前获取配置并且进行本地配置…

小皮面板webman ai项目本地启动教程

1.前置条件 下载小皮面板 下载后&#xff0c;双击安装&#xff0c;一路next&#xff08;下一步&#xff09;&#xff0c;无需更改配置。 2.安装必须软件 在小皮面板的软件管理页&#xff0c;安装编号①②③④下面四个软件。 3.启动本地服务 进入到小皮面板的首页&#x…

Java Stream API

Java Stream API 在现代软件开发中&#xff0c;处理集合&#xff08;如列表、集合等&#xff09;中的数据是一项常见且至关重要的任务。Java 自 JDK 8 引入的 Stream API 极大地简化了这一过程&#xff0c;使得数据处理变得更加直观、灵活且易于理解。本文将带你深入了解 Java…

mysql学习教程,从入门到精通,MySQL 删除数据表与选择数据库(7)

1、MySQL 删除数据表 MySQL中删除数据表是非常容易操作的&#xff0c;但是你在进行删除表操作时要非常小心&#xff0c;因为执行删除命令后所有数据都会消失。 语法 以下为删除MySQL数据表的通用语法&#xff1a;MySQL 删除数据表 MySQL中删除数据表是非常容易操作的&#xff…

空指针异常 (NullPointerException)怎么办

在 Java 编程中&#xff0c;空指针异常&#xff08;NullPointerException&#xff0c;简称 NPE&#xff09;是最常见且困扰开发人员的异常之一。尽管 Java 是一种强类型语言&#xff0c;设计上提供了类型安全的特性&#xff0c;但空指针问题依然是开发过程中最常见的运行时异常…

把Django字典格式的数据库配置转成tortoise-orm的URL格式

Django版的数据库配置如下&#xff1a; DATABASES {"default": {"ENGINE": "django.db.backends.mysql","NAME": "test_1","USER": "root","PASSWORD": "123456","HOST&quo…

MES系统如何支持企业进行数字化转型

MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;在企业数字化转型中扮演着至关重要的角色&#xff0c;它通过提供实时的生产数据、优化生产流程、提升质量管理水平、实现设备智能化管理以及促进企业内部协同和沟通等多种方式&#xff…

多线程下载网络资源

示例&#xff1a;模拟通过5个线程下载10个网络图片 import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayL…

Hive和Hbase的区别

Hive 和 HBase 都是 Hadoop 生态系统中的重要组件&#xff0c;它们都能处理大规模数据&#xff0c;但各自有不同的适用场景和设计理念。以下是两者的主要区别&#xff1a; 1. 数据模型 Hive&#xff1a;Hive 类似于传统的关系型数据库 (RDBMS)&#xff0c;以表格形式存储数据…

Linux_kernel移植linux09

一、温故知新 1、分析uboot源码目录 每个目录基本上都会有自己的Makefile进行当前层级目录的编译&#xff0c;最后在整个uboot源码目录中会有一个Makefile文件进行整合&#xff0c;将每一层级编译出的目标文件&#xff0c;整合到一起&#xff0c;链接到一起&#xff0c;最终生成…

Spark MLlib模型训练—文本算法 LDA(Latent Dirichlet Allocation)

Spark MLlib模型训练—文本算法 LDA(Latent Dirichlet Allocation) Latent Dirichlet Allocation(LDA)是一种用于主题建模的生成式概率模型,广泛应用于文本分析和自然语言处理。LDA 的目标是从一组文档中发现潜在的主题,并将每个文档表示为这些主题的概率分布。它通过推断…

vscode从本地安装插件

1. 打开VSCode。 2. 点击左侧菜单中的“扩展”&#xff08;或按CtrlShiftX&#xff09;。 3. 点击“更多操作”&#xff08;三个点&#xff09;> “从VSIX安装”。 4. 选择下载的.vsix文件。 5. 点击“安装”即可安装插件。

传统CV算法——基于Opencv的图像绘制

直线绘制 参数解析&#xff1a; &#xff08;图像矩阵&#xff0c;直线起始坐标&#xff0c; 直线终止坐标、颜色、线条厚度&#xff09; cv2.line()是OpenCV中用于绘制直线的函数。 参数说明&#xff1a;img&#xff1a;要绘制直线的图像矩阵。(100,30)&#xff1a;直线的起…

视频提取字幕的软件有哪些?高效转录用这些

探索视频的奥秘&#xff0c;从字幕开始&#xff01;你是否曾被繁复的字幕处理困扰&#xff0c;渴望有一款简单好用的在线免费软件来轻松解锁字幕提取&#xff1f; 告别手动输入的烦恼&#xff0c;我们为你精选了6款视频字幕提取在线免费软件&#xff0c;它们不仅能一键转录&am…

堆-数组的堆化+优先队列(PriorityQueue)的使用

一、堆 1、什么是堆&#xff1f; 以完全二叉树的形式将元素存储到对应的数组位置上所形成的新数组 2、为什么要将数组变成堆&#xff1f; 当数组中的元素连续多次进行排序时会消耗大量的时间&#xff0c;将数组变成堆后通过堆排序的方式将会消耗更少的时间 二、接口 给堆…

这才是程序猿梦想的终端,赶快动手搞起来

文章目录 目标资源列表安装iTerm2安装oh-my-zsh安装颜色主题查找配置文件将配置内容复制到本地设置iTerm2 安装NERD FONTS下载字体安装设置iTerm2 安装PowerLevel10k修改.zshrc重新加载配置 安装插件下载[语法高亮](#syntaxhighlighting)下载[命令提示](#autosuggestions)配置插…

flink窗口分组数据错乱

文章目录 问题目标解决问题-方案1使用事件时间迟到时间输出幂等 解决问题-方案2 问题 正常的flink 作业运行&#xff0c;带窗口的运行&#xff0c;因为上游业务的影响&#xff0c;导致业务恢复后&#xff0c;积累的kafka 数据瞬时涌到flink 程序里&#xff0c;flink 窗口分钟的…