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...