可執行二進制文件的形成過程與簡單調試


1) 預處理:主要對源碼預編譯語句(如宏定義define)和文件包含進行處理。即對宏指令替換和包含文件放置到需要編譯的文件中,完成后會生成完整的C程序源文件。

2) 編譯:對預處理以后文件進行編譯,生成.s后綴的匯編語言文件,即該文件里是匯編語言的代碼,匯編是一種更底層的語言,直接對硬盤進行操作。

3) 匯編:對匯編語言文件進行匯編,主要調用匯編處理程序來完成匯編,匯編是生成二進制機器代碼的過程,匯編后的文件以.o結尾,稱為目標文件。

4) 鏈接:將多個由匯編生成的目標文件以及引用的庫文件進行模塊鏈接,生成一個完整的可執行文件,鏈接時,所有目標文件被安排在可執行程序的適當位置,同時程序調用的庫函數也從各自所在的函數庫鏈接到程序中。

 

下面演示C語言代碼 如何轉變成 可執行的二進制文件:

假如現在有段C語言源代碼如下

 

對其進行預處理,處理后的文件如下圖所示

gcc -E -o a.cxx a.c

 

 生成匯編代碼

gcc -S -o a.s a.c

 

 

生成目標文件

gcc -c -o a.o a.c

 

鏈接生成可執行文件

gcc a.c -o a.out

 

最后一個可執行文件就生成了

 

下面是gdb調試程序基本使用

 

 

寫一個簡單的c語言程序測試下

 

 

生成debug文件

gcc -g -o a.debug hello.c

 

運行gdb,然后載入調試文件a.debug,list 查看源代碼

 

break 設置斷點,即運行到第幾行,讓程序暫停一下

 

info breakpoint 查看斷點,刪除斷點用delete + Num

 

run 運行程序,如下圖程序會在斷點處暫停

 

 

輸入next 讓程序繼續運行一行,輸入continue 讓程序運行到下一個斷點為止

 

在斷點處可以打印或者操作變量,對排除bug非常有用,退出則按q鍵即可

其他高級的用法可以去查閱相關資料,這里就不一一細說了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM