是什么将程序集转换为实际可执行的材料
What transitions assembly into actually executable material?
我对编译器的了解是,它们将源代码转换为程序集,然后神奇地将该程序集转换为可执行文件。
他们如何将程序集转化为可执行文件?任何链接都会被删除,因为我想用C++制作自己的编译器。
要将汇编语言转换为可执行文件,首先要使用汇编程序,然后(通常(使用链接器。
汇编程序将获取汇编语言源代码,并(通常(以某种格式或其他格式(例如,COFF或ELF(生成对象文件。具体细节因指令集而异,但典型的处理器会有一个表(或多个表(显示该处理器的指令是如何编码的。汇编程序解析指令,然后使用编码表中的信息告诉它如何生成对这些指令进行编码的单词。
然后,链接器获取该对象文件,至少有可能将其与其他包含它使用但未定义的外部例程的文件组合,并生成一个可执行文件。同样,细节各不相同,但在这种情况下,变化主要基于所涉及的文件的格式。曾经,大多数链接器都生成静态可执行文件,因此程序使用的任何外部函数都需要链接器将该函数复制到可执行文件中。大多数现代操作系统/加载程序支持某种形式的动态链接,其中程序可以依赖于外部例程,这些例程不是静态复制到程序中的——相反,程序通常包含对文件和函数名称的引用,由操作系统的加载程序在加载时找到文件,为每个函数分配地址,并固定引用以指向分配给代码的地址。
您可以使用"汇编程序"。有了MSVC编译器套件,就有了例如MASM。您应该注意,通常情况下,在正常的编译和链接过程中,您实际上不会在磁盘上获得汇编语言输出文件。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何在可执行文件中存储常量数组?
- 在现有的C++可执行项目CMAKE中构建Apache Arrow
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 可执行文件C++包括.obj,.lib和.dll吗?
- 是什么将程序集转换为实际可执行的材料