![]() |
1
11
Executables 是操作系统可以理解的二进制文件。可执行文件将包含包含数据的部分。Windows使用 PE format . PE格式有一个节,其中 machine 指令。这些指令只是按顺序排列的数字,CPU可以理解。 对messagebox()的函数调用是一个指令序列,它将 1)具有dll中的函数地址。这个地址是由编译器输入的 2)将参数“推”到堆栈上的说明 3)实际函数调用 4)某种清理(取决于调用约定)。 必须记住,exe文件只是经过特殊格式化的文件。我没有反汇编程序,但您可以尝试编译代码,然后在Visual Studio中打开您的exe来查看反汇编程序。 |
![]() |
2
4
如果我见过这个问题,那就太夸张了。 但是,我会尽我所能给出一个概述。 在二进制可执行文件中,有这些称为“字节码”的东西,字节码只是指令的十六进制重述。通常,您可以“查找”字节代码并将其转换为汇编指令。例如: 说明:
具有字节代码表示:
字节码被加载到RAM中,由处理器执行,这就是它的“语言”。没人知道我用字节码编写的程序,这会让我很难理解。组装是…足够有趣的。每当你用一种更高级的语言编译一个程序时,它必须把你的代码转换成汇编指令,你可以想象你的代码在编译之后会有多混乱。不要误会我,编译器很棒,但是用IDA Pro免费软件解开C++程序,你就会明白我在说什么。 简言之,这是可执行文件,当然有关于这个主题的书籍。 我不是Windows API专家,但其他人可以向您展示调用Windows API“MessageBox”的指令的外观。它应该只有几行装配线。 |
![]() |
3
2
无论编写什么代码(无论是用C语言还是其他语言编写的),都是由编译器编译成一种特殊的语言,称为汇编(好吧,机器代码,但它们非常接近)。汇编是一种非常低级的语言,由CPU本身执行。通常,您不会在汇编中编程,因为它是如此低级(例如,您不想处理从内存中来回拉位)。
我不能说
|
![]() |
4
-4
这取决于你所使用的语言。但对很多人来说,这就像…
或
|
![]() |
Zaratustra · 难以理解机器指令的执行 10 年前 |