c – 如何创建可在特定处理器体系结构(而不​​是某些 *** 作系统)上运行的可执行文件?

c – 如何创建可在特定处理器体系结构(而不​​是某些 *** 作系统)上运行的可执行文件?,第1张

概述所以我在Visual Studio中使用我的C程序,编译,它会吐出一个漂亮的小EXE文件.但是EXE只能在 windows上运行,我听到很多关于C/C++如何编译成汇编语言的东西,它直接在处理器上运行. EXE在 Windows的帮助下运行,或者我可以有一个程序来生成在mac上运行的可执行文件.但是,我不是将C代码编译成汇编语言,这是处理器特定的吗? 我的见解: >我猜我可能不是.我知道有一个英特 所以我在Visual Studio中使用我的C程序,编译,它会吐出一个漂亮的小EXE文件.但是EXE只能在 windows上运行,我听到很多关于C/C++如何编译成汇编语言的东西,它直接在处理器上运行. EXE在 Windows的帮助下运行,或者我可以有一个程序来生成在mac上运行的可执行文件.但是,我不是将C代码编译成汇编语言,这是处理器特定的吗?

我的见解:

>我猜我可能不是.我知道有一个英特尔C编译器,所以它会制作特定于处理器的汇编代码吗? EXE在windows上运行,因此它们已经建立了很多东西,从图形包到大规模的.NET框架.特定于处理器的可执行文件将从头开始,仅使用处理器的指令集.
>这个可执行文件是文件类型吗?我们可以运行windows并打开它,但之后只能控制切换到处理器?我假设这个可执行文件类似于 *** 作系统,因为它必须在启动任何其他 *** 作之前运行,并且只有处理器指令设置为“use”.

解决方法 让我们来看看“跑”是什么意思……

有些东西必须将二进制代码加载到内存中.这是一个 *** 作系统功能. .EXE或二进制可执行文件或包或其他任何内容都以特定于 *** 作系统的方式格式化,以便 *** 作系统可以将其加载到内存中.

必须将控制权交给那些二进制代码.还有 *** 作系统.

I / O例程(在C中,但在大多数地方都是如此)只是一个封装OS API的库. drat那OS,它无处不在.

回忆.

在过去(是的,我已经老了)我在没有 *** 作系统的机器上工作.我们也没有C.

我们使用“汇编程序”和“链接器”等工具编写机器代码,以创建可以加载到机器中的大型二进制映像.我们不得不通过痛苦的引导过程加载这些二进制图像.

我们使用前面板键将足够的代码加载到内存中,以读取像打孔纸带读取器这样的便携式设备.这将加载一小块相当标准的引导链接加载器软件. (我们使用聚酯薄膜胶带,因此不会磨损.)

然后,当我们在内存中有这个链接加载器时,我们可以用汇编程序提供我们之前准备的磁带.

我们编写了自己的设备驱动程序或者我们使用源代码形式的库例程,在纸带上打孔.

一个“补丁”实际上修补了纸带.此外,由于还存在很少的错误,我们必须根据手写指令调整内存映像 – 未放入磁带的补丁.

后来,我们有简单的 *** 作系统,它有简单的API,简单的设备驱动程序,以及一些实用程序,如“文件系统”,“编辑器”和“编译器”.这是一种叫做Jovial的语言,但我们有时也使用过Fortran.

我们必须焊接串行接口板,以便我们可以插入设备.我们不得不编写设备驱动程序.

底线.

您可以轻松编写不需要 *** 作系统的C程序.

>了解处理器芯片组中的硬件BIOS(或类似BIOS)设施.大多数现代硬件都有一个连接到ROM的简单 *** 作系统,可以进行开机自检(POST),加载一些简单的驱动程序,并找到启动块.
>了解如何编写自己的引导块.这是在POST之后加载的第一个正确的“软件”事物.这并不是那么难.您可以使用各种分区工具将引导块程序强制到磁盘上,并且您可以完全控制硬件.没有OS.
>了解GRUB,liLO或BootCamp如何启动 *** 作系统.这并不复杂.一旦它们被启动,它们就可以加载你的程序,然后你就可以运行了.这稍微简单一些,因为您创建了引导加载程序要加载的分区类型.以Linux为核心,你会更开心.不要试图弄清楚windows的启动方式 – 它太复杂了.
>阅读ELF. http://en.wikipedia.org/wiki/Executable_and_Linkable_Format>了解如何编写设备驱动程序.如果您不使用 *** 作系统,则需要编写设备驱动程序.

总结

以上是内存溢出为你收集整理的c – 如何创建可在特定处理器体系结构(而不​​是某些 *** 作系统)上运行的可执行文件?全部内容,希望文章能够帮你解决c – 如何创建可在特定处理器体系结构(而不​​是某些 *** 作系统)上运行的可执行文件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存