我知道可执行文件包含指令,但这些指令到底是什么?例如,如果我想调用MessageBox
API 函数,指令是什么样的?
谢谢。
可执行文件是操作系统可以理解的二进制文件。可执行文件将包含其中包含数据的部分。Windows 使用PE 格式。PE 格式有一个包含机器指令的部分。这些指令只是按顺序排列的数字,CPU 可以理解。
对 MessageBox() 的函数调用将是一系列指令,这些指令将
1)具有DLL中的函数地址。这个地址是编译器输入的
2) 将参数“推入”堆栈的指令
3)实际的函数调用
4)某种清理(取决于调用约定)。
重要的是要记住 EXE 文件只是特殊格式的文件。我没有反汇编,但你可以尝试编译你的代码,然后在 Visual Studio 中打开你的 EXE 来查看反汇编。
如果我见过一个,那是一个臃肿的问题。但是,我会尽力给出一个概述。在二进制可执行文件中有这些称为“字节码”的东西,字节码只是指令的十六进制表示。通常,您可以“查找”字节码并将它们转换为汇编指令。例如: 指令:
mov ax, 2h
具有字节码表示:
B8 02 00
字节码被加载到 RAM 中并由处理器执行,因为那是它的“语言”。没有人知道我知道字节码中的程序,这只是太复杂了。组装很有趣。每当你用更高级的语言编译一个程序时,它必须把你的代码转换成汇编指令,你想象一下你的代码在编译后会有多混乱。不要误会我的意思,编译器很棒,但是用 IDA Pro Freeware 反汇编 C++ 程序,你会明白我在说什么。简而言之就是可执行文件,当然有关于这个主题的书籍。我不是 Windows API 专家,但其他人可以向您展示调用 Windows API“MessageBox”的指令是什么样子的。它应该只有几行汇编。
无论编写什么代码(无论是用 C 还是其他语言)都由编译器编译成一种称为汇编的特殊语言(嗯,机器代码,但它们非常接近)。汇编是一种非常低级的语言,由 CPU 本地执行。通常,您不会在汇编中编程,因为它是如此低级(例如,您不想处理从内存中来回拉取位)。
我不能MessageBox
具体说明这个功能,但我猜它有很多指令。想一想:它必须绘制框,并根据您的计算机设置它的样式,并连接一个偶数处理程序,以便在用户单击按钮时发生某些事情,告诉 Windows(或任何操作系统)将其添加到任务栏(或码头等),还有很多其他的东西。
这取决于您使用的语言。但对于许多人来说,它就像......
msgbox("Your message goes here")
或者
alert("Your message goes here")