c编写操作系统的疑问

starzhangzsd 2016-06-26 05:44:20
gcc编译生成的文件为elf格式的,它怎么能代替汇编程序(比如nasm编写的)去做本该汇编做的事。毕竟相对于nasm生成的文件,gcc文件生成的elf多出了一些头文件段啊什么的。怎么利用gcc生成与“nasm生成的汇编”等价的汇编语言。
...全文
764 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zy1306 2016-07-19
  • 打赏
  • 举报
回复
objcopy
猪头三小队长 2016-07-11
  • 打赏
  • 举报
回复
gcc并不是gnu c compiler,而是gnu compiler collection,gcc可以编译多种语言,当然也可以包括汇编,现在的makefile已经用不着你显式地调用ld等链接程序,直接一个gcc,它会在合适的时候选择合适的应用程序去处理。
时雨大人 2016-07-06
  • 打赏
  • 举报
回复
引用 2 楼 starzhangzsd 的回复:
[quote=引用 1 楼 Zx_SSSS 的回复:] 首先要掌握一个概念,不管是什么语言编写的程序,最终都要翻译成机器码才能执行,从一个.c文件到可执行文件,需要经历:预处理->编译->汇编->链接这几个过程,gcc是一个工具集,它包含了处理上述几个流程的所有工具。可见在编译这一步生成了等价的汇编代码。elf是unix操作系统支持的可执行文件格式,操作系统读取elf文件,创建进程的运行环境。至于elf里边的段,有些是必须的有些是不必须的。感兴趣可以详细去了解了解。
哦。我没说清楚,我是问怎么利用gcc生成可以直接运行在裸机上的程序,而不要那些多余的段什么的[/quote] 生成的程序可以在裸机跑的,但是c程序运行需要初始化环境,一般都会有一段汇编代码(启动代码)来做这个事情,你把gcc编出来的二进制程序烧写到flash中,启动代码跑完了跳转到你烧写的地址执行就可以了。二进制程序怎么来?可以通过工具把elf转成二进制,其实也就是把elf可执行的二进制段提取出来而已,具体可以研究下bootloader程序,这就是跑裸机的。
starzhangzsd 2016-07-06
  • 打赏
  • 举报
回复
引用 1 楼 Zx_SSSS 的回复:
首先要掌握一个概念,不管是什么语言编写的程序,最终都要翻译成机器码才能执行,从一个.c文件到可执行文件,需要经历:预处理->编译->汇编->链接这几个过程,gcc是一个工具集,它包含了处理上述几个流程的所有工具。可见在编译这一步生成了等价的汇编代码。elf是unix操作系统支持的可执行文件格式,操作系统读取elf文件,创建进程的运行环境。至于elf里边的段,有些是必须的有些是不必须的。感兴趣可以详细去了解了解。
哦。我没说清楚,我是问怎么利用gcc生成可以直接运行在裸机上的程序,而不要那些多余的段什么的
时雨大人 2016-07-05
  • 打赏
  • 举报
回复
首先要掌握一个概念,不管是什么语言编写的程序,最终都要翻译成机器码才能执行,从一个.c文件到可执行文件,需要经历:预处理->编译->汇编->链接这几个过程,gcc是一个工具集,它包含了处理上述几个流程的所有工具。可见在编译这一步生成了等价的汇编代码。elf是unix操作系统支持的可执行文件格式,操作系统读取elf文件,创建进程的运行环境。至于elf里边的段,有些是必须的有些是不必须的。感兴趣可以详细去了解了解。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧