當前位置:首頁 » 編程軟體 » 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-19 15:21:28 瀏覽:693
winxp無法訪問 發布:2025-05-19 15:19:48 瀏覽:945
文件預編譯 發布:2025-05-19 15:14:04 瀏覽:642
怎麼在伺服器上掛公網 發布:2025-05-19 15:14:02 瀏覽:271
濟南平安e通如何找回密碼 發布:2025-05-19 14:56:58 瀏覽:175
安卓手機如何找到iccid碼 發布:2025-05-19 14:46:51 瀏覽:226
編譯的內核為什麼那麼大 發布:2025-05-19 14:45:21 瀏覽:178
什麼控制壓縮 發布:2025-05-19 14:28:13 瀏覽:930
網路伺服器忙指什麼 發布:2025-05-19 14:28:10 瀏覽:188
伺服器有外網ip 發布:2025-05-19 14:02:02 瀏覽:833