使用dd命令修改bin文件

1.使用环境

Linux环境下,使用shell脚本,修改bin文件。比如要在image.bin镜像文件的0xF000地址处填充一段数据。

2.指令详解

dd if=输入文件 of=输出文件 <ibs/obs/bs=块大小> seek=偏移块个数 conv=<关键字>

参数说明:

  • if=文件名:输入文件名,默认为标准输入。即指定源文件。
  • of=文件名:输出文件名,默认为标准输出。即指定目的文件。
  • ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
  • cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
  • skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
  • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
  • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  • conv=<关键字>,关键字可以有以下11种:
    conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
    ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swap:交换输入的每对字节
    noerror:出错时不停止
    notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
  • –help:显示帮助信息
  • –version:显示版本信息

3.举例验证

我的情况是:需要在镜像文件image.bin的0xF000地址处,插入一段数据,比如数据为0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08

  1. 我的数据是固定不变的,所以可以事先用VScode的Hex Editer插件把这段数据放进另一个bin文件中,比如test.bin;
  2. 使用dd指令用test.bin替换掉image.bin的0xF000处的数据
  3. dd指令只能进行两个文件的替换,所以数据一定要先放进文件中

执行脚本前image.bin 0xF000地址处全是0xFF:
在这里插入图片描述
脚本如下:

#!/bin/bash

#seek必须跟十进制数! conv必须跟参数notrunc
dd if=test.bin of=image.bin bs=1 seek=61440 conv=notrunc
  • test.bin数输入文件;
  • image.bin是输出文件;
  • bs=1表示同时设置输入输出块大小为1字节;
  • seek=61400表示从输出文件(image.bin)开头跳过61400个块(每个块1字节大小)后再开始复制;
  • conv=notrunc表示不截短输出文件;

执行脚本后,image.bin 0xF000地址处被替代:
在这里插入图片描述
注意:seek必须跟十进制数! conv必须跟参数notrunc!一定是两个文件的替换!

4.参考文献

菜鸟教程

禁止转载!!!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 很抱歉,dd命令不能实现不断加压的脚本。dd命令通常用于将数据从一个文件或设备复制到另一个文件或设备,不支持实现压力测试等功能。 如果您需要进行压力测试,您可以使用其他工具,如 Apache JMeter、LoadRunner 等。 ### 回答2: 要使用Linux命令dd写一个不断加压的脚本,首先需要了解dd命令使用方法。dd命令是一个用于复制文件和转换文件命令,可以通过指定输入和输出文件来控制数据复制和转换的过程。 脚本的实现思路是使用dd命令不断地向一个输出文件写入数据,从而实现加压的效果。以下是一个示例的脚本代码: ```shell #!/bin/bash count=1 output_file="/path/to/output/file" while true do dd if=/dev/zero bs=$((1024 * $count)) count=1 >> "$output_file" count=$((count + 1)) done ``` 脚本首先定义了一个变量count,用于控制每次写入的数据块大小。output_file变量用于指定输出文件的路径。接下来进入无限循环,循环体内执行dd命令,将/dev/zero设备的内容以块大小计算的字节数写入output_file文件中。每次循环后,count增加1,即数据块大小逐渐加大。 要运行这个脚本,首先需要将代码保存到一个文件中(如script.sh),然后在终端中使用以下命令给予脚本执行权限并运行: ```shell chmod +x script.sh ./script.sh ``` 这样脚本就会开始执行,不断向output_file文件中写入越来越大的数据块。注意,在运行脚本时可能需要root权限才能操作/dev/zero设备。 需要注意的是,这个脚本会不断向output_file中写入数据,可能会占用大量磁盘空间,因此在使用时需要注意磁盘空间的使用情况,并在需要时停止脚本的执行。 ### 回答3: 使用Linux命令dd编写一个不断加压的脚本可以使用循环来实现。下面是一个简单的脚本示例: ```shell #!/bin/bash output_file="/path/to/output/file" block_size=1M limit=10G while true; do dd if=/dev/zero of=$output_file bs=$block_size count=$limit conv=fsync status=none limit=$((limit * 2)) # 增加limit的值以实现不断加压 done ``` 上述脚本中,`output_file`变量用于指定输出文件的路径,`block_size`变量表示每块数据的大小,`limit`变量表示每次写入的数据量。在循环中,dd命令将从/dev/zero设备读取数据,并写入到指定的输出文件中。`count`参数指定了每次写入的数据块数量,`conv=fsync`参数用于确保数据被写入磁盘并同步。`status=none`参数用于隐藏命令的输出,以免在控制台上打印太多信息。 每次循环结束后,脚本会将`limit`的值乘以2,以实现不断加压的效果。这样,每次写入的数据量都会逐渐增加,压力也会逐渐加大。 要运行这个脚本,只需要将脚本保存为一个可执行文件(比如`script.sh`),然后使用`./script.sh`命令来执行。根据需要,可以根据实际情况修改`output_file`、`block_size`和`limit`的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fengwang0301

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值