好吧,所以我想知道如何创建一个程序,创建第二个程序(就像大多数压缩程序如何创建自解压自可执行文件一样,但这不是我需要的)。
假设我有 2 个程序。每个包含一个类。我将用来修改类并用数据填充类的一个程序。第二个文件是一个程序,它也有类,但是是空的,它的唯一目的是以特定方式访问这些数据。我不知道,我在想特定的类是否被序列化然后“注入(inject)”到第二个文件中。但是,如何才能做到这一点呢?我发现修改已编译的文件非常有趣,尽管我从未能够做出不会导致错误的更改。
这只是一个想法。我不知道解决方案是什么,这只是我的想法。
我更喜欢一些跨平台的信息,例如 c 或 c++。我唯一接受的其他语言是 c#。
还有
我不是在寻找第 3 方库或 Boost 之类的东西。如果有的话,朝正确的方向插入可能是我所需要的。
++还有
我不想使用编译器。
Jalf 居然读了我写的东西
这正是我想知道的方法。根据我上面的问题,我认为这是相当明显的。我没有提到编译文件或脚本。
QUOTE "我发现修改已经编译好的文件很有趣"
发帖前请先阅读并理解问题。
谢谢。
最佳答案
从头开始构建可执行文件很困难。首先,您需要为程序执行的操作生成机器代码,然后您需要将此类代码封装在可执行文件中。除非您想为一种语言编写编译器,否则这太过分了。
这些生成自解压可执行文件的实用程序并不是真正从头开始制作可执行文件。他们有预先生成的可执行文件,数据文件只是附加到它的末尾。由于 Windows 可执行文件格式允许您将数据放在文件末尾,因此只关心“真正的可执行文件”部分(exe header 说明它有多大 - 其余部分将被忽略)。
例如,尝试生成两个自解压 zip,并对它们进行二进制比较。你会看到他们的前 X KBytes 完全一样,剩下的是变化,根本不是可执行文件,它只是数据。执行文件时,它会查找在文件末尾找到的内容(数据)并将其解压缩。
查看维基百科条目,转到外部链接部分进行更深入的挖掘: http://en.wikipedia.org/wiki/Portable_Executable
我在这里只提到了 Windows,但同样的原则也适用于 Linux。但是不要指望有跨平台的结果,你必须在每个平台上重新实现它。我无法想象比可执行文件更依赖于平台的东西。即使您使用 C#,您也必须生成 native stub ,这在 Windows(在 .net 下)或 Linux(在 Mono 下)上运行时是不同的。
关于c# - 在运行时生成可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266735/