17

我知道可执行文件包含指令,但这些指令到底是什么?例如,如果我想调用MessageBoxAPI 函数,指令是什么样的?

谢谢。

4

4 回答 4

14

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

对 MessageBox() 的函数调用将是一系列指令,这些指令将

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

2) 将参数“推入”堆栈的指令

3)实际的函数调用

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

重要的是要记住 EXE 文件只是特殊格式的文件。我没有反汇编,但你可以尝试编译你的代码,然后在 Visual Studio 中打开你的 EXE 来查看反汇编。

于 2009-10-24T02:51:22.470 回答
8

如果我见过一个,那是一个臃肿的问题。但是,我会尽力给出一个概述。在二进制可执行文件中有这些称为“字节码”的东西,字节码只是指令的十六进制表示。通常,您可以“查找”字节码并将它们转换为汇编指令。例如: 指令:

mov ax, 2h

具有字节码表示:

B8 02 00

字节码被加载到 RAM 中并由处理器执行,因为那是它的“语言”。没有人知道我知道字节码中的程序,这只是太复杂了。组装很有趣。每当你用更高级的语言编译一个程序时,它必须把你的代码转换成汇编指令,你想象一下你的代码在编译后会有多混乱。不要误会我的意思,编译器很棒,但是用 IDA Pro Freeware 反汇编 C++ 程序,你会明白我在说什么。简而言之就是可执行文件,当然有关于这个主题的书籍。我不是 Windows API 专家,但其他人可以向您展示调用 Windows API“MessageBox”的指令是什么样子的。它应该只有几行汇编。

于 2009-10-24T03:12:56.437 回答
2

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

我不能MessageBox具体说明这个功能,但我猜它有很多指令。想一想:它必须绘制框,并根据您的计算机设置它的样式,并连接一个偶数处理程序,以便在用户单击按钮时发生某些事情,告诉 Windows(或任何操作系统)将其添加到任务栏(或码头等),还有很多其他的东西。

于 2009-10-24T02:51:25.513 回答
-6

这取决于您使用的语言。但对于许多人来说,它就像......

msgbox("Your message goes here")

或者

alert("Your message goes here")
于 2009-10-24T02:47:51.017 回答