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