1. 程式人生 > ># 20155336 2017-2018 1 《信息安全系統設計基礎》2017-9-27課堂實踐

# 20155336 2017-2018 1 《信息安全系統設計基礎》2017-9-27課堂實踐

如何 虛擬機的基本操作 ast 功能 創建 main函數 編輯 file ref

20155336 2017-2018 1 《信息安全系統設計基礎》2017-9-27課堂實踐

第一題:vi

  1. 每個.c一個文件,每個.h一個文件,文件名中最好有自己的學號
  2. 用Vi輸入圖中代碼,並用gcc編譯通過
  3. 在Vi中使用K查找printf的幫助文檔
  4. 提交vi編輯過程截圖,要全屏,包含自己的學號信息

    說起來很慚愧,第一次接觸虛擬機,對很多地方都陌生,正好趁學習這門課程掌握一下虛擬機的基本操作。
    首先創建一個文件夾,命名為text1。然後將第一道題的要求都錄入進去。錄入完畢後,輸入`gcc *.c`,
    發現了錯誤,然後`vi`進入到.c的文件中,修改了錯誤再次編譯一遍,沒有錯誤,然後就輸出`./a.out`
    

技術分享

技術分享

技術分享

技術分享

代碼鏈接

第二題:gcc測試

  1. 用gcc 進行預處理,編譯,匯編,鏈接vi輸入的代碼
  2. 生成的可執行文件中要有自己的學號
  3. 提交預處理,編譯,匯編,鏈接,運行過程截圖,要全屏,包含自己的學號信息

    第二題,按照第一節課課上記得筆記,在課下自己實踐。雖然中間粗心代碼出現錯誤,但是問題不大
    

技術分享

技術分享

技術分享

代碼鏈接

第三題:gdb測試

  1. 用gcc -g編譯vi輸入的代碼
  2. 在main函數中設置一個行斷點
  3. 在main函數增加一個空循環,循環次數為自己學號後4位,設置一個約為學號一半的條件斷點
  4. 提交調試過程截圖(一定包含條件斷點的),要全屏,包含自己的學號信息

    這道題出現了很多問題,首先下載GDB,然後在設置了條件斷點之後,程序調試的時候沒有在斷點處停下。在空循環中加個打印空行再設置條件斷點然後運行就可以了。(中間由於很多次自己都忘記了編譯~~~~~導致每次都會顯示自己定義的n沒有定義。)

技術分享

技術分享

技術分享

代碼鏈接

第四題:靜態庫測試

  1. 除了main.c外,其他4個模塊(add.c sub.c mul.c div.c)的源代碼不想給別人,如何制作一個mymath.a靜態庫?main.c如何使用mymath.a?
  2. 提交靜態庫生成和調用過程截圖(一定包含條件斷點的),要全屏,包含自己的學號信息

    這道題將自己的代碼編譯為以下形式:
    gcc -c add.c -o add.o
    gcc -c sub.c -o sub.o
    gcc -c mul.c -o mul.o
    gcc -c div.c -o div.o
    然後使用ar創建一個存檔文件:ar rcs mymath.a add.o sub.o mul.o div.o
    編譯的時候再將程序和mymath.a鏈接起來:gcc -static -o link1 main.o mymath.a
    接著運行就可以了!
    

技術分享

技術分享

第五題:共享庫

  1. 除了main.c外,其他4個模塊(add.c sub.c mul.c div.c)的源代碼不想給別人,如何制作一個mymath.so共享庫?main.c如何使用mymath.so?
  2. 提交共享庫生成和調用過程截圖(一定包含條件斷點的),要全屏,包含自己的學號信息

    創建一個共享文件
    gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c
    創建一個可執行的目標文件
    gcc -o link2 main.c ./mymath.so
    運行即可
    

技術分享

技術分享

技術分享

代碼鏈接

Myod:

1 復習c文件處理內容

2 編寫myod.c 用myod XXX實現Linux下od -tx -tc XXX的功能

  1. main與其他分開,制作靜態庫和動態庫

  2. 編寫Makefile

5 提交測試代碼和運行結果截圖, 提交調試過程截圖,要全屏,包含自己

# 20155336 2017-2018 1 《信息安全系統設計基礎》2017-9-27課堂實踐