1)源** ----》 預處理器 ----》 巨集替換後的源**,這一部分是預處理器處理巨集,將所有巨集定義的變數替換為值。例如巨集定義 color_red 為 #ff0000,在這一步中相當於將 color_red 替換為 #ff0000。
2)巨集替換後的源** ----》 編譯器 ----》中間檔案,這一部分是將函式等模組進行編譯,但並沒有分配函式執行的實際位址,程式還不能執行。
3)中間檔案 ----》鏈結器 ----》可執行程式,這一部分是鏈結器將編譯好的模組與實際使用的位址進行鏈結,程式轉為可執行狀態。
標頭檔案中(.h 檔案)儲存了大量的函式宣告。引入標頭檔案實際上就是在進行函式宣告。如果把所要使用的函式宣告單獨拿出,不再引入標頭檔案也可。例如將 puts() 的函式宣告拿出,不引用#include .
int __cdecl puts(char const* _buffer); // 不呼叫標頭檔案的情況下,使用puts函式
int main(void)
標頭檔案展開實際上就是將標頭檔案中所有的函式宣告取出,放到 main() 函式上面。但標頭檔案內部可能還會包含其他標頭檔案,所以標頭檔案展開是乙個遞迴的過程。
標頭檔案展開的具體操作需借助 gcc 編譯器完成。例如展開 file_include.c 檔案下的標頭檔案 #include (若 stdio.h 檔案中含有其他標頭檔案,也會被全部展開):
在 terminal視窗下,輸入gcc -e .\file_include.c -o file_include.i,會在當前路徑下生成 file_include.i 檔案,該檔案即為標頭檔案展開後的檔案。可將檔案重新命名為 file_include.i.c 後執行,與 file_include.c 執行結果相同(file_include.i.c 需使用 msvc 編譯器編譯,否則會報錯,原因目前未知)。
3 檔案包含
1.原理 2.相關函式 3.分類 本地檔案包含 4.不限制檔案 檔案可以為jpg png x等 5.重點 找到可控檔案 6.偽協議 7.具體場景 日誌檔案 8.具體場景 session base64 中的 可有可沒有,在php中不重要,所以,可使用base64讓字元消失 單個字母解釋為空 可以嘗試多...
php學習 4檔案包含
檔案包含 include,include once,require,require once,將乙個檔案的內容包含進另外乙個檔案。include和require 使用一次包含一次檔案 include once和require once 不管在乙個指令碼中包含另外乙個指令碼多次,都只載入一次 包含檔案...
DVWA(九) 檔案包含漏洞
由於開發人員編寫原始碼,將可重複使用的 插入到單個的檔案中,並在需要的時候將它們包含在特殊的功能 檔案中,然後包含檔案中的 會被解釋執行。由於並沒有針對 中存在檔案包含的函式入口做過濾,導致客戶端可以提交惡意構造語句提交,並交由伺服器端解釋執行。檔案包含攻擊中web伺服器原始碼裡可能存在inlcud...