代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

可执行文件到底是如何工作的?

  •  12
  • Alon Gubkin  · 技术社区  · 15 年前

    我知道可执行文件包含指令,但这些指令究竟是什么?如果我想打电话给 MessageBox 例如,API函数,指令是什么样子的?

    谢谢。

    4 回复  |  直到 10 年前
        1
  •  11
  •   Andrew Keith    15 年前

    Executables 是操作系统可以理解的二进制文件。可执行文件将包含包含数据的部分。Windows使用 PE format . PE格式有一个节,其中 machine 指令。这些指令只是按顺序排列的数字,CPU可以理解。

    对messagebox()的函数调用是一个指令序列,它将

    1)具有dll中的函数地址。这个地址是由编译器输入的

    2)将参数“推”到堆栈上的说明

    3)实际函数调用

    4)某种清理(取决于调用约定)。

    必须记住,exe文件只是经过特殊格式化的文件。我没有反汇编程序,但您可以尝试编译代码,然后在Visual Studio中打开您的exe来查看反汇编程序。

        2
  •  4
  •   Natalie Adams    15 年前

    如果我见过这个问题,那就太夸张了。 但是,我会尽我所能给出一个概述。 在二进制可执行文件中,有这些称为“字节码”的东西,字节码只是指令的十六进制重述。通常,您可以“查找”字节代码并将其转换为汇编指令。例如: 说明:

    mov ax, 2h
    

    具有字节代码表示:

    B8 02 00
    

    字节码被加载到RAM中,由处理器执行,这就是它的“语言”。没人知道我用字节码编写的程序,这会让我很难理解。组装是…足够有趣的。每当你用一种更高级的语言编译一个程序时,它必须把你的代码转换成汇编指令,你可以想象你的代码在编译之后会有多混乱。不要误会我,编译器很棒,但是用IDA Pro免费软件解开C++程序,你就会明白我在说什么。 简言之,这是可执行文件,当然有关于这个主题的书籍。 我不是Windows API专家,但其他人可以向您展示调用Windows API“MessageBox”的指令的外观。它应该只有几行装配线。

        3
  •  2
  •   Nathan Tuggy TonyLuigiC    10 年前

    无论编写什么代码(无论是用C语言还是其他语言编写的),都是由编译器编译成一种特殊的语言,称为汇编(好吧,机器代码,但它们非常接近)。汇编是一种非常低级的语言,由CPU本身执行。通常,您不会在汇编中编程,因为它是如此低级(例如,您不想处理从内存中来回拉位)。

    我不能说 MessageBox 具体的功能,但我想它是 批次 指示。想一想:它必须画出框,然后按照你的电脑的风格来设计它,并挂上一个偶数处理程序,这样当用户单击按钮,告诉Windows(或任何操作系统)将其添加到任务栏(或Dock等)时,就会发生一些事情,以及其他许多事情。

        4
  •  -4
  •   mrdenny    15 年前

    这取决于你所使用的语言。但对很多人来说,这就像…

    msgbox("Your message goes here")
    

    alert("Your message goes here")
    
    推荐文章