为什么将字符插入可执行二进制文件会导致它“中断”?
而且,有没有办法在不破坏编译程序的情况下添加字符?
背景
我早就知道可以使用十六进制编辑器来更改已编译的可执行文件中的代码,并且仍然可以正常运行...
例子
作为下面应用程序中的示例,Facebook
可以将其更改为Lacebook
,并且程序仍然可以正常执行:
但它打破了新角色
我也知道,如果添加了新字符,它会破坏程序并且它不会运行,或者它会立即崩溃。例如,My
在前面添加Facebook
将实现此目的:
我知道的
- 我已经完成了一些工作,
C
并了解代码是以人类可读、编译和链接到可执行文件的方式编写的。 - 我已经完成了汇编语言的介绍性研究,并理解了有关数据、命令和指针移动的概念
- 我为 Windows、Mac 和 Linux 编写过小程序
我不知道的
- 我不太明白操作系统和可执行文件之间的关系。我猜当您输入程序名称并按回车键时,您基本上是在指示操作系统“执行”该文件,这基本上意味着将文件加载到内存中,将处理器的指针设置为它,并告诉它'去!'
- 我明白为什么二进制文件的文本字符串中有多余的字符会导致问题
我想知道的
- 为什么多余的字符会导致程序中断?
- 是什么决定了程序坏了?操作系统?操作系统是否也将此程序保持为沙盒状态,以便它现在不会使整个系统崩溃?
- 有没有办法通过十六进制编辑器将额外字符添加到已编译程序的文本字符串中,而不会使应用程序中断?