簡單認識認識ELF文件

2020-12-22 電子工程專輯

幾種常見的ELF文件

在Linux下,我們經gcc編譯之後生成的可執行文件屬於ELF文件:


ELF是一類文件類型,而不是特指某一後綴的文件。ELF(Executable and Linkable Format,可執行與可連結格式)文件格式,在Linux下主要有如下三種文件:

  • 可執行文件(.out):Executable File,包含代碼和數據,是可以直接運行的程序。其代碼和數據都有固定的地址 (或相對於基地址的偏移 ),系統可根據這些地址信息把程序加載到內存執行。
  • 可重定位文件(.o文件):Relocatable File,包含基礎代碼和數據,但它的代碼及數據都沒有指定絕對地址,因此它適合於與其他目標文件連結來創建可執行文件或者共享目標文件。
  • 共享目標文件(.so):Shared Object File,也稱動態庫文件,包含了代碼和數據,這些數據是在連結時被連結器(ld)和運行時動態連結器(ld.so.l、libc.so.l、ld-linux.so.l)使用的。

ELF格式可結構大致為:

(圖片來源:百度百科)


ELF文件由4部分組成,分別是ELF頭(ELF header)程序頭表(Program header table)節(Section)節頭表(Section header table)

實際上,一個文件中不一定包含全部內容,而且它們的位置也未必如同所示這樣安排,只有ELF頭的位置是固定的,其餘各部分的位置、大小等信息由ELF頭中的各項值來決定。

readelf工具的使用

在Linux下,我們可以使用readelf 命令工具可以查看ELF格式文件的一些信息。

下面我們先準備一個動態連結相關的demo,就拿我們之前分享的文章:靜態連結與動態連結補充(Linux)中的demo來做演示:

文件1(main.c):

#include "test.h"

int main(void)
{
 print_hello();
 return 0;
}

文件2(test.c):

#include "test.h"

void print_hello(void)
{
 printf("hello world\n");
}

文件3(test.h):

#ifndef __TEST_H
#define __TEST_H

#include <stdio.h>

void print_hello(void);

#endif

執行相關命令生成相關文件:.out文件.o文件.so文件。如:


下面我們使用readelf命令來查看這三類文件的一些信息。readelf命令格式為:

readelf <option(s)> elf-file(s)

查看可執行文件頭部信息:


查看可執行文件頭部信息是,我們發現這樣一個問題,頭部信息中的類型竟然是共享庫文件,而我們查看的是可執行文件,自相矛盾?

查了一些資料:

https://blog.csdn.net/cclethe/article/details/83387685

發現:gcc編譯默認加了--enable-default-pie選項:


Position-Independent-Executable是Binutils,glibc和gcc的一個功能,能用來創建介於共享庫和通常可執行代碼之間的代碼–能像共享庫一樣可重分配地址的程序,這種程序必須連接到Scrt1.o。

標準的可執行程序需要固定的地址,並且只有被裝載到這個地址時,程序才能正確執行。

PIE能使程序像共享庫一樣在主存任何位置裝載,這需要將程序編譯成位置無關,並連結為ELF共享對象。

引入PIE的原因是讓程序能裝載在隨機的地址,通常情況下,內核都在固定的地址運行,如果能改用位置無關,那攻擊者就很難藉助系統中的可執行碼實施攻擊了。

類似緩衝區溢出之類的攻擊將無法實施。而且這種安全提升的代價很小。

也就是說,pie這是一種保護我們可執行程序的一種手段。這裡我們只是做實驗,我們可以加-no-pie參數先把pie給關掉:


可以看到,類型終於對得上了。ELF頭部信息還包含有Entry point address(入口地址)、Start of program headers(程序頭的起始字節)、Start of section headers(節頭的起始字節)等信息。

查看可重定位文件頭部信息:


查看共享目標文件頭部信息:


同樣的,readelf 搭配其它參數可以查看ELF文件的其它信息:

objdump工具的使用

objdump工具用於顯示一個或多個目標文件的信息。objdump命令格式:

objdump <option(s)> <file(s)>

可執行文件、可重定位文件與共享目標文件都屬於目標文件,所以都可以使用這個命令來查看一些信息。

查看可重定位文件反彙編信息:


查看可執行文件反彙編信息:


查看共享目標文件反彙編信息:

總結

以上就是本次的分享。簡單地介紹了ELF文件的一些信息,同時介紹了分析ELF文件的兩個工具。

ELF文件的內容很多,並且比較抽象,詳細分析起來是個深坑。我們大致先進行一個簡單的了解,之後如果深入學習時再做另外的分享。

上就是本次的分享,如有錯誤,歡迎指出!謝謝

歡迎大家進群交流、共同進步。同時,我也會關注一些大家問的一些問題,從中挑選一些具有代表性的、並且在我知識範圍內的問題寫出相關文章做分享。

猜你喜歡

Linux下socket編程實例

Linux下應用開發基礎

Linux下能編譯成功,而Windows下編譯不過?

【Linux筆記】Vi/Vim編輯器

C語言、嵌入式中幾個非常實用的宏技巧

C語言、嵌入式應用:TCP通信實例分析

C語言、嵌入式重點知識:回調函數

C語言、嵌入式位操作精華技巧大匯總

相關焦點

  • Linux elf文件混淆加密工具
    ELF 全稱 「Executable and Linkable Format」,即可執行可連結文件格式,目前常見的Linux、 Android可執行文件、共享庫(.so)、目標文件( .o)以及Core 文件(吐核)均為此格式。
  • 教你零基礎搭建小程序(認識全局配置文件)
    上篇文章我們認識了小程序的基本結構目錄講道,一個小程序會包括兩種配置文件:1、全局配置文件app.json2、頁面自身的配置文件page.json本篇文章,我們一起來深入探究app.json」等頁面3、如何實現打開小程序後,直接顯示某一特定頁面(一)app.json(全局配置文件)的基本布局點擊下方連結,直接移步微信小程序官網,了解小程序配置文件。
  • ELF文件格式解析
    ELF文件格式的相關知識是Linux下進行pwn以及reverse的基礎,是二進位可執行文件的一種形式,下面我們通過一個ELF文件的生成,並結合其ELF文件結構分析一下一個二進位文件在系統中執行時與權限相關的一些ELF結構知識點。文章內容較為淺顯,大佬可略過,文章有不足之處,也懇請批評指正。
  • 今日帶你認識PS打開和查看Ai文件
    在本文中,我分享了一些針對新手同學的快速Photoshop技巧,例如在Photoshop中打開失量插圖文件,用顏色突出顯示菜單項以及更多內容!如何在Photoshop中打開和查看Illustrator文件(.ai和.eps)有時,您會從客戶端或其他設計師那裡收到.ai或.eps格式的Illustrator文件,並且您的計算機上可能只安裝了Photoshop。無需下載第三方軟體,您只需使用Photoshop打開並查看Illustrator文件。
  • 平面設計-AI軟體認識
    對於初學者來說,需要認識AI這款軟體,基礎常用的都有哪些功能需要設置和調整?RGB-網頁設計CMYK-印刷用AI做設計,不同階段進行保存,輸出後不能更改顏色。f6鍵-打開顏色面板ctrl+k 首選項關掉ctrl-點選shift-多選ctrl+f-原地複製粘貼用的最多 alt+滑鼠左鍵複製ctrl+shift+v-就地粘貼多頁粘貼識別很好一個一個粘不同畫板統一位置alt+shift+ctrl+v-所有畫板粘貼ctrl+x-剪切嵌入文件操作
  • 詳解對ELF64之手動脫殼的逆向分析
    ,它提供了很多腳本可以自動地識別出文件格式,能對當前欄位進行說明。(方框處),並在文件頭位置臨時放置代碼(橢圓處),很不正常啊!已dump到文件中;將此dump文件上傳到linux中,運行正常,OK了。三、IDC腳本的理解作者的代碼寫得很清楚,紅筆框出來的代碼是重點,尤其是當你對RLF64文件頭格式不清楚時就覺得不太好理解;我這裡畫了張圖,結合idc代碼幫助理解。
  • 3天學會 premiere 2020(第一章 認識pr界面)
    下面開始認識pr操作界面。首先打開軟體新建項目認識項目設置所有的項目設置都將應用到整個項目,項目文件用於存儲與序列和資源有關的信息在彈出的選擇目標路徑的窗口中選定「按時學習」,注意儘可能的制定以後不必再更改的位置和文件夾名稱,因為PR不會將視頻、音頻或靜止圖像文件存儲在項目文件中,而是存儲對這些文件的引用,即剪輯(基於導入時改文件的文件名和位置),稍後移動項目文件則需要移動其關聯文件。選擇好文件夾後,單擊「選擇文件夾」確認路徑。
  • 認識你自己,從認識大腦開始!
    「認識你自己!」這是兩千多年前希臘古城德爾斐的阿波羅神殿上刻著的一句名言。兩千多年來,人類在探索外在物質世界上,已經有了不少收穫,甚至有點兒忘乎所以了,以致於忽略了對內在的探索。人類要認識自己,要從「身、心、腦」三個方面進行。當然,表層的認識,已經有不少了,大腦有些什麼功能、內心狀態怎樣調整、身體健康怎樣獲得,我們對這些都有了很多的了解。
  • 初步認識PS界面——版本CC2019
    最上面是菜單欄,像文件的新建、保存等命令就需要在菜單欄完成。菜單欄下面是屬性欄,左邊是工具欄,每個工具對應的屬性欄是不一樣的。最右邊是浮動面板,有圖層面板,通道面板,它們可以隨時調出,也可以恢復原位。最中間是PS的工作區。整個PS界面的顏色是可以調整的,不喜歡這種灰濛濛的感覺可以通過快捷鍵Ctrl+K調出首選項,在裡面修改界面顏色。
  • PS-AdobePhotoshop入門認識
    (來自百度搜索)簡單的來說,ps就是可以來處理視頻,圖片,使其達到你所預期狀態的軟體。先認識工具具體介紹ps工具很多,想要弄明白還是需要花比較長的時間,我們就來了解幾個新手常用的吧移動工具就是拿來移動圖層的,點擊移動工具,再將滑鼠點擊所要移動的圖層上面,就可以可以移動圖層了
  • 牛認識主人,驢認識主人的槽,以色列卻不認識;我的民卻不留意
    求主耶穌不斷光照我們屬靈的眼睛,開我們心竅明白聖經,能聽見、看見屬靈的真理→用真道"顯明"那些人認識主;那些不認識他。以上禱告、祈求、代求、感謝、祝謝!是奉我主耶穌基督的聖名求的!阿們。問:律法以下的人認識基督嗎?答:律法以下的人不認識主→ 牛認識主人,驢認識主人的槽,以色列卻不認識;我的民卻不留意。」
  • 簡單認識攝影中的光線類型
    在一張簡單的照片畫面上,有光線和沒光線的區別很大。好的光線,可以為照片增添意境,為畫麵塑造氣氛。攝影作為光影的藝術,單單操作相機還不夠,還需要拍攝者學會運用攝影中的這些光線,讓照片變得生動起來。今天就讓我們來認識一下,攝影中常見的光線都有哪些。 一、順光 順光是攝影裡一個經常出現的光線環境。
  • 《認識1》認識你獨一的真神
    我們打開聖經約翰福音17章3節翻到一起讀:認識你獨一的真 神,並且認識你所差來的耶穌基督,這就是永生。阿們今天我與大家一起查考、交通、分享《認識你獨一的真神》第一講 獻上禱告:親愛的阿爸聖天父、我主耶穌基督、感謝聖靈常與我們同在!阿們。感謝主恩!
  • 2021考研政治馬原系統複習資料:認識的本質
    2021考研政治馬原系統複習資料:認識的本質 2021考研已經進入準備階段,眾所周知。6月是考研基礎階段複習的黃金時間,考生務必要重視,打好基礎,為將來做準備!不知道大家對考研政治的學習是否順利,有沒有遇到瓶頸。
  • 樂高EV3第三講,認識編程,搭建四驅車
    課程主題認識編程及結構課程目標1、了解軟體界面主要部分:程序編寫區、工具區、下載區;2、電機控制程序編寫:大型電機、轉向、移動;3、搭建簡單的機器人小車下載並運行程序聯繫我們上節課學習並認識了機器人的各種零件,製作了很多機器人模型,但是機器人不是用來擺著看的,而是需要它動起來跟我們一起玩、給我們的生活及工作提供幫助的;那麼請問我們怎樣才能讓它動起來呢?是的我們要用到電機、而且要給它編寫程序,它才能動起來!
  • 收藏|教你認識電腦鍵盤上的按鍵基礎篇,輕鬆認識鍵盤
    關注我你就是個網絡、電腦、手機小達人常用的鍵盤,無論是臺式機還是筆記本,除了材質、品牌等差異,基本用法是一樣的,今天就帶大家認識鍵盤1、鍵盤區域劃分,主要有主鍵盤區、功能區、光標控制區、小鍵盤區和指示燈區,日常使用最多的是主鍵盤區,方向鍵和數字的小鍵盤。
  • 一個簡單遊戲認識世界 居家生活更加多彩
    鄭州市惠濟區花園口幼兒園疫情期間開展「我的遊戲我做主,由你來挑戰」系列活動,讓幼兒足不出戶,通過一個個簡單好玩的小遊戲去認識周圍世界,居家生活變得多姿多彩。讓我們繼續走進幼兒遊戲的世界。小班 漫長的假期,相信孩子們都有了很大的進步,小二班的田一粟小朋友要通過遊戲來考考大家了。小朋友們,你們會單腳跳嗎?
  • 這4個巨人不是奧特曼,很少人認識,第2個估計沒人認識
    這4個巨人不是奧特曼,很少人認識,第2個估計沒人認識奧特曼,是一種特殊的電視劇,並不能簡單的說是動漫,而應該叫特攝。在整個特攝的系列中,奧特曼只是其中的一小部分,還有很多很多。在這其中,有一些特攝中出現的人物,和奧特曼差不多,也是有著巨人的身影,很少人認識,且他們不是奧特曼,第2個估計沒人認識,那就假裝下是奧特曼。比如說這第1個,紅眼睛的巨人。咋一看,和奧特曼一樣,奧特曼所擁有的特徵,他也都擁有,類似初代奧特曼的頭,黑色的彩色計時器,身上的花紋倒像是直接穿著一件披風而已,但他不是奧特曼,而是出現在千禧奧特曼中之中的一個反派,可惜的是這部作品,無緣面世。
  • 認識樂高城市
    其實這些問題對於家長來說都不難,甚至可以說很幼稚、很簡單。唯一值得大家思考的是,如何從自己巨大的詞彙庫中,選取最能讓孩子接受的詞句,解答孩子「這是什麼,那是什麼」的狀況。孩子對世界的認知就是通過他已經知道的東西去聯繫未知。基礎詞彙積累得越多,對於這個世界的認知也更加容易。
  • 中國最難認的5個漢字,很多人不認識!你認識幾個?
    一字多音,一字多義等等,還有些看似簡單的文字,我們卻不知道怎麼讀,這就是漢字的魅力所在。中國的文字,不像英語中的字母總共才26個,每個漢字都有他獨特的意義,因此,現在很外國人,都紛紛來到中國,來學習中國的語言文字。