Day2-ELF format & protection
ELF format ELF 是 Executable and Linkable Format 的縮寫,可以簡單稱為可執行檔。不同平台有不同的可執行檔格式,如 Windows 的 exe 和 Linux 的 ELF。而 ELF 檔又包含各種區段 (Section),這些區段在執行時會映射 (mapping) 到記憶體中。常見的區段包括:.text、.bss、.data、.rodata、.got、.plt 等。以下是對這些區段的介紹: .text 存放編譯後的程式碼 .bss 存放未初始化的全域變數 .data 存放初始化的全域變數 .rodata 存放可讀不可寫的資料 ex: 輸出文字 .got (Global Offset Table) 用於儲存動態鏈接 (dynamic linking) 時需要的外部函數的地址,並幫助程式在執行期間通過這些地址來訪問函數或變數。 .plt 用於動態呼叫外部函數 呼叫一個外部函數時,程式會先跳到 .plt,然後再由 .plt 透過 .got 找到實際的函數地址 以下是一段程式碼中各段落存在的區段 1#include <stdio.h> 2int a; // .bss 3int b = 100; // .data 4// .text start 5int main(){ 6 puts("Hello World!"); // .rodata 7 return 0; 8} 9// .text end 各區段皆可能成為後續內容可以利用的部分,不過目前可以先看過即可,後續講述到攻擊手法時會再進一步介紹 ...