BIOS里面很多Code都是C编写的,也是用VS 编译的。EFI文件和EXE可以说都是一个妈生的兄弟俩,所以我们先看一下EXE文件的编译,然后再去看EFI文件。
我们先写一个小程序,用VS编译一下看结果。程序如下:
#include<stdio.h>
void main()
{
printf("Hello world!");
return;
}
用管理员身份运行“ VS2013 x64 本机工具命令提示”,然后CD 到a.c目录下面,用CL进行编译:
C:\Windows\system32>d:
D:\>cd D:\CS
D:\CS>cl a.c
用于 x64 的 Microsoft (R) C/C++ 优化编译器 18.00.40629 版
版权所有(C) Microsoft Corporation。 保留所有权利。
a.c
Microsoft (R) Incremental Linker Version 12.00.40629.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:a.exe
a.obj
D:\CS>a
Hello world!
D:\CS>
上面编译连接可以分开来进行,首先仅编译生成a.obj文件:
D:\CS>cl /c a.c
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
a.c
D:\CS>
然后a.obj再链接,生成a.exe文件:
D:\CS>link a.obj
Microsoft (R) Incremental Linker Version 11.00.61030.0
Copyright (C) Microsoft Corporation. All rights reserved.
D:\CS>
至此,一个程序就完成了从c代码到exe可执行程序的过程.
此外,还可以用“/FAs”参数来生成汇编代码去分析C到汇编的结果。
下面我们看看EFI文件的生成过程。