當前位置:首頁 » 編程語言 » 載入elf並執行C語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

載入elf並執行C語言

發布時間: 2022-05-05 18:49:35

『壹』 寫好的c語言是怎麼在電腦上執行

這個過程是這樣的。
首先你寫好了C源程序,以文件的形式保存在磁碟上。

然後需要用編譯器編譯這個源程序,編譯器可以是GCC,也可以是TC(Turbo C),也可以是別的……
編譯的過程就是把C的代碼轉換成類匯編代碼,也就是機器能直接執行的東西。初學者開始不用太關心編譯的細節,這是個很麻煩、很復雜的過程,中間也有很多環節。編譯後的產出是目標文件--習慣上叫obj文件,在win中名字習慣為xxx.obj,在unix中習慣用xxx.o。

上述產生的目標文件只是你自己寫的,還要把裡面使用的一些系統庫連接上,比如printf,strcmp這些函數。不太恰當的比喻就是粘在一起。
當然,也有的程序不用連接其他的庫。連接之後,根據平台的不同以及編譯環境的不同,產生在某平台可以直接運行的二進制文件,win下是exe文件,linux下是elf文件。

這就是從源代碼到二進制可執行文件的大概過程。

『貳』 C語言文件的編譯與執行的四個階段並分別描述

開發C程序有四個步驟:編輯、編譯、連接和運行。

任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。

1、預處理:導入源程序並保存(C文件)。

2、編譯:將源程序轉換為目標文件(Obj文件)。

3、鏈接:將目標文件生成為可執行文件(EXE文件)。

4、運行:執行,獲取運行結果的EXE文件。

(2)載入elf並執行C語言擴展閱讀:

將C語言代碼分為程序的幾個階段:

1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。

2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。

3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。

4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。

『叄』 C語言哪些函數語句的機器碼會存儲在內存中

自然不會,每一個變數(包括函數)都有自己的生命周期,程序結束後釋放所有的內存,程序運行時只有被聲明為inline內聯函數,或者正在被調用的函數(也就是你上面收提及的第一種情況)存儲在內存中(棧區),調用完畢後立即釋放內存。
回答完畢,祝樓主學習進步。

『肆』 怎樣創建真正很小的Linux下的ELF可執行文件

ELF(Executable and Linking Format)是一種對象文件的格式,用於定義不同類型的對象文件(Object files)中都放了什麼東西、以及都以什麼樣的格式去放這些東西。它自最早在 System V 系統上出現後,被 xNIX 世界所廣泛接受,作為預設的二進制文件格式來使用。可以說,ELF是構成眾多xNIX系統的基礎之一,所以作為嵌入式Linux系統乃至內核驅動程序開發 人員,你最好熟悉並掌握它。
其實,關於ELF這個主題,網路上已經有相當多的文章存在,但是其介紹的內容比較分散,使得初學者不太容易從中得到一個系統性的認識。為了幫助大家 學習,我這里打算寫一系列連貫的文章來介紹ELF以及相關的應用。這是這個系列中的第一篇文章,主要是通過不同工具的使用來熟悉ELF文件的內部結構以及 相關的基本概念。後面的文章,我們會介紹很多高級的概念和應用,比方動態鏈接和載入,動態庫的開發,C語言Main函數是被誰以及如何被調用的,ELF格 式在內核中的支持,Linux內核中對ELF section的擴展使用等等。

『伍』 有關elf ,c語言編程,電子詞典

ELF(Executable and Linking Format)是可執行連接格式

可執行連接格式是UNIX系統實驗室(USL)作為應用程序二進制介面
(Application Binary Interface(ABI)而開發和發布的。工具介面標准委
員會(TIS)選擇了正在發展中的ELF標准作為工作在32位INTEL體繫上不同操
作系統之間可移植的二進制文件格式。

用linux的gcc編譯器就可以生成elf文件

金山詞霸里的*.dic文件是詞典文件 ,估計6188也是
不過格式應該不一樣的
dic估計是dictionary

『陸』 elf文件增加一個節

則載入器將把elf文件看作是程序頭表描述的段的集合,一個段可能包含多個節,節頭表可選.

『柒』 自己怎麼載入elf文件,並能調用裡面的函數執行

ELF(Executable and Linking Format)是一種對象文件的格式,用於定義不同類型的對象文件(Object files)中都放了什麼東西、以及都以什麼樣的格式去放這些東西。它自最早在 System V 系統上出現後,被 xNIX 世界所廣泛接受,作為預設的二進制文件格式來使用。可以說,ELF是構成眾多xNIX系統的基礎之一,所以作為嵌入式Linux系統乃至內核驅動程序開發人員,你最好熟悉並掌握它。
其實,關於ELF這個主題,網路上已經有相當多的文章存在,但是其介紹的內容比較分散,使得初學者不太容易從中得到一個系統性的認識。為了幫助大家學習,我這里打算寫一系列連貫的文章來介紹ELF以及相關的應用。這是這個系列中的第一篇文章,主要是通過不同工具的使用來熟悉ELF文件的內部結構以及相關的基本概念。後面的文章,我們會介紹很多高級的概念和應用,比方動態鏈接和載入,動態庫的開發,C語言Main函數是被誰以及如何被調用的,ELF格式在內核中的支持,Linux內核中對ELF section的擴展使用等等。
好的,開始我們的第一篇文章。在詳細進入正題之前,先給大家介紹一點ELF文件格式的參考資料。在ELF格式出來之後,TISC(Tool Interface Standard Committee)委員會定義了一套ELF標准。你可以從這里()找到詳細的標准文檔。TISC委員會前後出了兩個版本,v1.1和v1.2。兩個版本內容上差不多,但就可讀性上來講,我還是推薦你讀 v1.2的。因為在v1.2版本中,TISC重新組織原本在v1.1版本中的內容,將它們分成為三個部分(books):
a) Book I
介紹了通用的適用於所有32位架構處理器的ELF相關內容
b) Book II
介紹了處理器特定的ELF相關內容,這里是以Intel x86 架構處理器作為例子介紹
c) Book III
介紹了操作系統特定的ELF相關內容,這里是以運行在x86上面的 UNIX System V.4 作為例子介紹
值得一說的是,雖然TISC是以x86為例子介紹ELF規范的,但是如果你是想知道非x86下面的ELF實現情況,那也可以在中找到特定處理器相關的Supplment文檔。比方ARM相關的,或者MIPS相關的等等。另外,相比較UNIX系統的另外一個分支BSD Unix,Linux系統更靠近 System V 系統。所以關於操作系統特定的ELF內容,你可以直接參考v1.2標准中的內容。
這里多說些廢話:別忘了 Linus 在實現Linux的第一個版本的時候,就是看了介紹Unix內部細節的書:《The of the Unix Operating System》,得到很多啟發。這本書對應的操作系統是System V 的第二個Release。這本書介紹了操作系統的很多設計觀念,並且行文簡單易懂。所以雖然現在的Linux也吸取了其他很多Unix變種的設計理念,但是如果你想研究學習Linux內核,那還是以看這本書作為開始為好。這本書也是我在接觸Linux內核之前所看的第一本介紹操作系統的書,所以我極力向大家推薦。(在學校雖然學過操作系統原理,但學的也是很糟糕最後導致期末考試才四十來分,記憶彷彿還在昨天:))
好了,還是回來開始我們第一篇ELF主題相關的文章吧。這篇文章主要是通過使用不同的工具來分析對象文件,來使你掌握ELF文件的基本格式,以及了解相關的基本概念。你在讀這篇文章的時候,希望你在電腦上已經打開了那個 v1.2 版本的ELF規范,並對照著文章內容看規范里的文字。

『捌』 GCC amp;ELF文件格式 amp;linux內核怎麼載入和啟動一個可執行程序

你的問題可以這樣問:為什麼同樣都是「程序」(C代碼),同樣都是GCC編譯,有的成了應用程序,有的成了內核? 內核從文件的角度來看,就是一個編譯好的映像,它的格式和ELF是不同的。因為前者是在沒有文件的概念下,先運行起來,支撐操作系統的其...

『玖』 數據結構c語言怎麼運行啊

任何C語言程序包括用C語言編寫的數據結構程序,都必須經過,編輯、編譯、鏈接、執行四個階斷。
1、編輯,即編寫源碼,可以使用任何的文本編輯器來編寫源碼,以windows為例,即可以使用vc、vs等專業的IDE,也可以使用記事本、editplus、以及gvim等文本編輯器來編寫源碼。
2、編譯,即通過C語言編譯器對C語言源碼進行編譯,比如gcc、vc等等。
3、鏈接,編譯完成後,需要通過鏈接器,將所有的庫、編譯器輸出文件,合並為一個操作系統可載入的應用程序,在Windows平台這種格式為PE格式,在Linux平台這種格式稱為ELF格式。
4、運行,當鏈接完成後,一個可執行的C語言程序就產生了,這時候通過圖形界面的雙擊或者控制台才可以運行程序。

『拾』 elf可執行文件如何動態載入一個so

有三個做法:
1、在elf尾部插入shellcode,然後,修改elf文件的最後一個pt_load段頭的增長該段的長度。把DT_INIT節或DT_INITARRAY的指針指向你的shellcode里,一般的加固技術也是這種做法。
2、把這個elf文件A打包到另一個elf文件B裡面去,在B里幹完你要乾的事情後,再載入A,如果不想把A釋放到文件系統里,就要自己實現一個linker。娜迦的加固也是這樣做的。
3、修改elf文件里的DYNAMIC節,添加一個類型為DT_NEEDED的節點,還要把要載入的so的名字寫入到DT_STRSZ節里去,由於elf文件里的里的地址都是寫死的,不一定有空位置讓你插一個新的結點,可能要抹掉現有的才有位置插,如果對llvm熟悉,可以利用llvm把elf文件轉換成一個地址無關的lir語言,再進行修改。