挖掘目標檔案(一)

2021-08-20 17:08:42 字數 1333 閱讀 5096

int printf(const char* format, ...);

int global_init_var = 84;

int global_uninit_var;

extern char __executable_start;

__attribute__ ((section("foo"))) int global =43;

typedef int                                     hresult;

#define _hresult_typedef_(_sc) ((hresult)_sc)

enum hresult

;void func1(int i)

int main(void)

gcc -c ******section.c
目標檔案是由各個節(section)或者說段(segment)組成。

如上所示的原始檔******section.c,將其編譯成目標檔案******section.o:

#gcc -c ******section.c
可以用如下命令來檢視檢視目標檔案的各個段的基本資訊:

我們也可以從readelf命令來檢視elf檔案,檢視檔案頭

具體這個結構的定義可以檢視/usr/include/elf.h標頭檔案裡的elf32_ehdr或者elf64_ehdr結構。

使用如下命令可以檢視段表

段表是乙個以elf32_shdr結構體為元素的陣列。陣列的大小為elf32_ehdr裡面的 number of section headers:這一行。

使用如下命令可以檢視符號表:

目標檔案裡有什麼 揭秘目標檔案

程式源 被編譯後生成的機器指令被放在 段 text 全域性變數和區域性靜態變數被放在資料段 data 除此之外還有程式裡邊的唯讀變數 如const修飾的變數 和字串常量被分配在唯讀資料段 rodata 注釋資訊段 comment 堆疊提示段 nute.gnu stack 未初始化的全域性變數和靜態區...

檔案與目標操作

start 有時候我們需要判斷某個檔案是否存在,很簡單,使用 e 即可,下面是乙個簡單例子。usr bin perl print 請輸入路徑和檔名 n chomp my file if e file 除此之外,我們還可以通過下面的操作符來測試檔案的其他屬性。檔案測試操作符 意義 r檔案或目錄,對當前...

7 目標和檔案

1 目標路徑 首先,將檔案的目標路徑賦值給乙個目錄,採用path變數 其次,1 basename 變數 返回路徑中檔名部分 2 用dirname 變數 返回路徑中目錄部分 3 用pathinfo 變數 獲取檔案的資訊 獲取檔名資訊 print r pathinfo path array path p...