gpt4 book ai didi

c - x86 程序集 : What's the main prologue and epilogue?

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:51 31 4
gpt4 key购买 nike

我正在关注 this tutorial在 x86 汇编上。到目前为止,每个示例都使用作者称之为“c-driver”的程序,用汇编模块编译,用于某种“初始化”。像这样的东西:

int main(void) {
int ret = asm_main();
return ret;
}

然后使用 C 调用约定正常编写 asm_main 函数。我想知道 C 编译器生成的所需初始化究竟是什么,以及它是否可以以可移植的方式完成。

信息:我在 Windows XP,32 位机器上,使用 NASM 汇编程序和 mingw32-gcc 进行链接。

最佳答案

初始化不是由 c 编译器生成的,它是 c 库的一部分(这使得为每个操作系统/处理器定制更容易)。

有问题的代码在 windows/unixy 系统上通常非常简单 - 通常会进行一些库初始化(打开 STDIN、STDOUT、STDERR、设置时区等)、设置环境、处理传递给 main 的命令行;捕获 main() 的返回并调用 exit 等。

大多数 c 库中的启动代码位于名为 crt0.c、crt1.c 或类似文件(crt = c 运行时)的文件中。

在更原始或裸系统上,它还会设置堆栈和其他寄存器并清除 BSS 数据区域 - 在这种情况下,它通常在汇编程序中(通常是 crt0.S)。

这是 BSD c 启动代码的链接 - link text

mingw for windows 的启动代码在 crt1.c 中 - http://mingw.cvs.sourceforge.net/viewvc/mingw/runtime/

关于c - x86 程序集 : What's the main prologue and epilogue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724594/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com