【问题标题】:How are complex executable files written? [closed]复杂的可执行文件是如何编写的? [关闭]
【发布时间】:2013-03-26 16:24:30
【问题描述】:

投票否决这个问题显然很好,但请告诉我为什么它很愚蠢或不受欢迎,我只是想学习


我的目标是理解 Chrome 等复杂的程序。

我了解这些文件可能只需几行即可将文件提取到指定位置、编辑注册表或执行简单任务(如 .bat 文件)。

但是复杂的 .exe 文件,如 acrobat.exe 或 game.exe(如..... bioshock.exe)呢?


如果我错了,请纠正我:

我假设它的工作原理与
将某些文件加载​​到 ram 和其他文件中一样。 它将存储所有可能的命令或指向执行此操作的某个位置(鼠标右键单击 = 选择/火枪)

但是这些公司是如何制作这些 .exe 的呢?
可以/它们中的任何一个都用 java 编码吗?
其他人怎么能侵入他们来改变一些事情呢?就像关于 SimCity 离线模式的争议(虽然我不认为 .exe 中存在黑客攻击)
最后我记得,你不能像存档一样打开 .exe 对吧?

【问题讨论】:

    标签: windows compiler-construction exe executable


    【解决方案1】:

    为您的问题写一个完整的答案是非常困难的。然而,让我试着让你一睹复杂“.exe”是如何编写的。

    假设你想写一个写字母的程序。您将首先为此开发一个名为Software requirement specification 的东西。你需要为此做一些requirement gathering

    所以,你将开始记下:
    1. 可以选择添加收件人。 2. 可以在信中添加文字。 3. 有签名信的机制。

    等等……

    然后您将开始编码。

    首先,您将首先编写一些代码来满足您的要求。 (您的复杂 exe 开始成形;耶!)

    然后您可能需要重新考虑您的原始策略(除非您是专家)并重写一些代码.. 这个过程将反复进行。

    到目前为止,您将拥有一堆“源文件”:

    1. 一个从用户那里接受一些文本的java程序。
    2. 一个使用POP发送电子邮件的java程序(电子信件就是:))
    3. 一个使用openssl 分配digital certificate 来“签署”您的信件的Java 程序。

    但是现在你会意识到你已经制作了 3 个有 3 个主程序的程序。但是你需要一口气做这些事情!因此,您将删除主程序并编写一个“主类”来创建三个源文件的对象。你的主程序可能看起来像这样:

    AcceptText ap = new AcceptText("My letter content");
    Letter L = new Letter();
    L.addContent(ap);
    Signature S = new Signature();
    S.sign();
    L.addSignature(S);
    L.send();
    

    现在您将把它编译成可执行文件或可执行 jar。您甚至可能想使用 swing 或类似工具添加一些 GUI。

    这样你就准备好了你的第一个复杂的 exe!运行它来自己发送电子邮件! 现在,当您查看 bioshock.exe 之类的文件时,它们是由数千个源文件组成的,所有文件都整齐地放在一起。他们还添加了大量的艺术作品、动画、剪辑和声音。他们一点一点地创造出如此复杂的程序。没有秘诀。您可以非常轻松地学习创建 exe 的基础知识。但要大规模开发,需要极大的毅力和诚意。

    如果您真的有兴趣,请彻底学习 2-3 种编程语言。然后学习一些“框架”或库。这些可以是像 [opengl] (http://en.wikipedia.org/wiki/OpenGL) 这样的图形库。缓慢而坚定地;您将学习如何自己制作其中一个复杂的 exe。这需要时间和大量的努力。快乐编码!欢迎来到俱乐部。

    【讨论】:

    • 哇,感谢您花时间写这篇文章,实际上并没有失去我。当我是一个狂热的游戏玩家时,我一直在修改,并在一些场合涉足 3ds + maya,因此了解资源文件以及它们如何很好地运行,我喜欢这样想。是的,我计划遵循与您的建议类似的内容,谢谢。只是一个问题,公平地说,我所指的 exe 或多或少是“如果”和“何时”指令代码的大量集合(除了图片和其中可能包含的任何其他资源)? ?
    • 是的,你的 exe 肯定会有很多条件表达式。但这并不是他们拥有的全部。
    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多