为什么在可执行二进制文件中插入字符会导致其“中断”?
并且,有什么方法可以添加字符而不破坏已编译的程序?
我已经知道很长时间了,可以使用十六进制编辑器更改已编译的可执行文件中的代码,并且仍然可以正常运行...
例如,在下面的应用程序中,Facebook
可以将其更改为Lacebook
,程序仍然可以正常执行:
我还知道,如果添加了新字符,它将破坏程序,使其无法运行,否则将立即崩溃。例如,My
在前面添加Facebook
将实现以下目的:
C
并且了解到代码是以人类可读的方式编写,编译并链接到可执行文件中的。我不太了解操作系统和可执行文件之间的关系。我猜想,当您键入程序的名称并按回车键时,您基本上是在指示操作系统“执行”该文件,这基本上意味着将文件加载到内存中,设置处理器的指针并告诉它'走!'
现代操作系统只是将文件映射到内存中。在需要它之前,他们不会费心加载它的页面。
为什么多余的字符导致程序中断?
因为它们将所有其他信息放在错误的位置文件中,所以加载程序最终将加载错误的内容。另外,代码跳转可能会到达错误的位置,可能在指令中间。
是什么决定程序已损坏?操作系统?操作系统是否也将此程序保留在沙盒中,以使它不会在当今使整个系统崩溃?
这完全取决于搞砸了什么。可能是您移动了标头,并且加载程序注意到标头中的某些参数包含无效数据。
有什么方法可以通过十六进制编辑器在已编译程序的文本字符串中添加额外的字符,而不会导致应用程序中断?
可能不可靠。至少,您需要可靠地标识需要调整的代码部分。这可能会令人惊讶地困难,特别是如果有人试图如此故意地做到这一点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句