当前位置:首页 » 编程软件 » gcc编译纯二进制程序

gcc编译纯二进制程序

发布时间: 2022-06-08 06:14:03

① 怎样使gcc生成二进制机器码,该怎么处理

windows的文件格式,gcc不会产生PE文件头的

至于ELF文件头,要看你用gcc时候的命令行选项。
如果什么也不加,编译加连接,产生的是ELF可执行文件
如果用-s,只编译不连接,产生的是ELF可重装载文件

要混合编程的话,gcc命令行加-s,nasm命令行加

② 请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

gcc -S *.c 预处理+反汇编

③ windows下如何用gcc 把c编译成纯二进制文件

方法如下: 双击GCC安装包,mingw-get-setup.exe,点击Install安装。 点击Change选择安装路径,尽量不要有中文和空格, 将package 下面的mingw-***和mingw32-***和msys-**。都勾选上,等待下载安装,直到勾选框全部变成土灰色。 找到安装目录的bi

④ 用gcc编译器C语言程序的技巧

方法/步骤
1、编写c代码,并输入以下代码,生成文件hello.c
[root@wahoo
test]#
vim
hello.c
#include
<stdio.h>
#define
DISPLAY
"hello
c!"
int
main(void)
{
printf("%s\n",
DISPLAY
);
return
0;
}
ZZ(说明:ZZ当前文件进行快速保存操作)
2、预编译(Preprocessing)
会对各种预处理指令(#include
#define
#ifdef
等#开始的代码行)进行处理,删除注释和多余的空白字符,生成一份新的代码
[root@wahoo
test]#gcc
-E
hello.c
-o
hello.i
E
参数
通知gcc对目标文件进行预编译,这里是对文件hello.c文件
o
参数
是对命令输出结果进行导入操作,这里是把
gcc
-E
hello.c
操作结果输出到文件hello.i(命名要自定义)中进行保存
这个命令执行完后我们目录下多了一个文件hello.i,你可以查阅一下文件的内容。
3、编译(Compilation)
对代码进行语法、语义分析和错误判断,生成汇编代码文件
[root@wahoo
test]#gcc
-S
hello.i
-o
hello.s
S
参数
通知gcc对目标文件进行编译,这里是对文件hello.i文件
通过这一步我们知道
C语言跟汇编的
关系,至于他们之前是如何进行转换的,大家可以进行更深入的学习与探讨。
此时目录下多了一个hello.s文件,内容如图
4、汇编(Assembly)
把汇编代码转换与计算机可认识的二进制文件,要知道计算机只认识0和1呢
[root@wahoo
test]#gcc
-c
hello.s
-o
hello.o
c
参数
通知gcc对目标文件执行指令转换操作
此步骤我们得到文件hello.o
大家也同样打开文件查看一下,这个文件里面几乎没几个字符大家能看懂,这就对了,但大家可以通过这种方法将其转化为我们可读的形式:
[root@wahoo
test]#readelf
-a
hello.o
5、链接(Linking/Build)
通俗的讲就是把多个*.o文件合并成一个可执行文件,二进制指令文件
[root@wahoo
test]#gcc
hello.o
-o
hello
这里我们就得到了一个可以直接在系统下执行的文件
hello
我们也可以对这个文件进行readelf操作,也可以进行二进制指令转汇编的操作
[root@wahoo
test]#objmp
-d
hello
6、程序运行
[root@wahoo
test]#./hello
hello
c!
7、总结:gcc
编译c程序的主要过程包括
预编译->编译->汇编->连接
四个过程,每个过程都分别进行不同的处理,了解了这其中的一些原理,对c编程的理解大有益处

⑤ 怎样使gcc生成二进制机器码

gcc编译出来的就是2进制码,它是针对你所在平台的2进制码。
如果你想运行平台不是编译平台,就得用到交叉编译环境了

⑥ 如何用gcc将两个.o的文件链接成一个纯二进制的的文件

除非你自己写一个编译器,要不然是不可能链接出不带elf的二进制文件。只要你在linux下就只能得到elf格式的.

⑦ 求助:在linux下用gcc编译C程序

回复在linux下怎么编译C程序:比如C程序保存为helloworld.c#
gcc
-o
helloworld
helloworld.c
这一步把helloworld.c编译成可执行的二进制文件helloworld,这里不一定要和C程序的名字一样,可以是其它名字.然后执行该程序:#
./hellogcc
编译器有许多选项,一般来说我们只要知道其中的几个就够了。-o
选项我们已经知道了,表示我们要求输出的可执行文件名。
-c
选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。-g
选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。

⑧ 如何将一个函数编译成二进制文件

通过下面这条命令,main.c和swap.c 就产生了一个可执行二进制文件swap

》gcc mian.c swap.c -o swap

那么这条命令是么样把源程序变成可执行程序的呢?

步骤如下:

1、驱动程序首先调用C预处理器(CPP)把源文件翻译成一个ASCII中间文件mian.i,预处理器会把#include所包含的内容都插入到声明的位置,并且做宏替换,把main.c 文件的第3行 的SIZE替换成2(注意这里只是做简单的文本替换)。

2、接下来驱动程序的C编译器将main.i翻译成汇编语言程序main.s

3、然后驱动程序的汇编器将汇编语言程序main.s 翻译成可重定位的二进制文件main.o

4、最后运行链接器将main.o 与swap.o 以及一些必要的系统目标文件(比如你将调用的printf函数就是printf.o)连接起来变成一个可执行的二进制文件。

⑨ gcc编译流程

gcc编译分为四部;

第一步,预编译,将程序中的宏定义等预编译;

第二步,编译,将*.h,*.c等文件编译成为*.o文件;

第三步,汇编;

第四步,连接,将*.o文件连接库,生成可执行文件!

⑩ linux 用GCC编译器编译程序的问题,急

1,如果在不同系统架构下(x86, powerpc)产生的二进制文件不一样

2,GCC是一样的,但是系统更新过吗? 不同的程序库(如升级更新了libc6),编译结果也会不同

3,如果该工程使用到了一些时间常量等(如gnome-about程序包含一个编译时间的常量),在每次编译时也会产生不同结果

4,GCC的问题,如果你的GCC是自己编译的,编译时又没有选择编译自检,就可能得到一个有问题的GCC,它的编译结果是不可靠的

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:613
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:945
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:742
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372