gpt4 book ai didi

c - 修补二进制文件

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:41 25 4
gpt4 key购买 nike

我写了一个简单的 C 程序来显示“Hello World!”到标准输出。然后我编译了它,并删除了源代码。

我已着手对程序进行修补,使其显示“Hello World!”以外的内容。为此,我找到了存储在二进制文件中的字符串,并使用 vi 的十六进制编辑器将二进制文件中存储字符串的偏移量(我假设它是数据部分)中的“e”的 ASCII 替换为“a”。

我只更改了二进制文件的一个字节,0x65 到 0x61,'e'->'a',然而,当我运行程序时,我得到了这个:

./simple: line 1: 0000000:: command not found
./simple: line 2: 0000010:: command not found
./simple: line 3: 0000020:: command not found
./simple: line 4: 0000030:: command not found
./simple: line 5: 0000040:: command not found
./simple: line 6: 0000050:: command not found
./simple: line 7: syntax error near unexpected token `('
./simple: line 7: `0000060: 0000 0000 0000 0000 1900 0000 2802 0000 ............(...'

有人知道为什么会这样吗?即为什么单字节替换可以使原本可执行的二进制文件(我之前运行良好)不可执行?该字节只是字符串的一部分——它不是指令的一部分——所以我不明白为什么会这样。

感谢所有反馈。

最佳答案

您的编辑器保存的不是原始字节,而是它们的十六进制表示。该文件的第一行如下所示:

00000000:   45 4C 46 7F ...

这就是 shell 显示错误消息的原因。它读取该行并尝试将其解释为 /bin/sh 的脚本,因为它不是以字节 ELF\x7F 而是以字节 开头>00000000

使用合适的十六进制编辑器,你会没事的。

关于c - 修补二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com