2017-2018-1 學號20155311 《信息安全系統設計基礎》第5周學習總結

2017-2018-1 學號20155311 《信息安全系統設計基礎》第5周學習總結

教材學習內容總結

1、機器級代碼

  • 對於機器級編程來講,兩種抽象尤其重要。
  1. 指令集體系結構ISA
  2. 存儲器系統
  • ISA:機器級程序的格式和行爲,定義爲指令集體系機構,它定義了處理器狀態指令的格式,以及每條指令對狀態的影響。機器級程序使用的存儲器地址是虛擬地址,提供的存儲器模型看上去是一個很是大的字符數組linux

  • PC:程序計數器。在IA32中,用%eip表示,指示將要執行的下一條指令在存儲器中的地址。git

  • 程序存儲器:包含程序的可執行機器代碼,操做系統須要的一些信息,用來管理過程調用和返回的運行時棧,以及用戶分配的存儲器塊。
  • 反彙編器查看目標代碼文件的內容。
objdump -d xxx.xx
  • 二進制文件能夠用od 命令查看,也能夠用gdb的x命令查看。 有些輸出內容過多,咱們可使用 more或less命令結合管道查看,也可使用輸出重定向來查看。
od code.o | more
od code.o > code.txt
  • 小端法的讀法是與天然方向是相反的,P109頁18 a0 04 08的正確順序實際上是18 a0 04 08,去掉最高位的0後即爲0x804a018

C語言數據類型在IA32中的大小程序員

  • 一些一般對C語言程序員隱藏的機器代碼在IA32中是可見的:
    程序計數器(在IA32中,一般稱爲「PC」,用%eip表示)指示將要執行的下一條指令在存儲器中的地址。
  • 整數寄存器:包含8個命名的位置,分別存儲32位的數值,這些寄存器能夠存儲地址(對應C語言的指針)或整數數據,有的寄存器被用來記錄某些重要的程序狀態,其餘的寄存器用來保存臨時數據,例如過程的局部變量和函數的返回值。
  • 條碼寄存器:保存着最近執行的算術或邏輯指令的狀態信息,他們用來實現控制或數據流中的條件變化。
    浮點寄存器:一組浮點寄存器存放浮點數據
    棧幀結構:機器用棧來傳遞過程參數、存儲返回信息、保存寄存器用於之後恢復,以及本地存儲。爲單個過程分配的那部分棧稱爲棧幀。最頂端的棧幀以兩個指針界定,寄存器%ebp爲幀指針,寄存器%esp爲棧指針。
  • 彙編代碼:
    pushl %ebp 將寄存器%ebp的內容壓入程序棧 movl %esp,%ebp 獲得新棧低,將當前棧頂賦予棧低 popl %ebp過程調用結束,恢復舊棧低 ret 子程序的返回指令

操做系統:編程

  • 文件:1.硬件cpu
    2.內存I/O --→字節數組
  • 虛擬內存:0-2^32-1 (邏輯地址(大) 物理地址(小)
  • 進程數組

  • mount把目錄中文件夾映射到arm中利於調試
    靜態庫
    ar --→利用交叉編譯器的ar
  • linux命令三要素:名字 參數 選項
  • execve(2)執行程序
  • which ls 查看ls安裝目錄
  • 使用GDB的堆棧跟蹤功能(GDB中有不少針對調用堆棧的命令,都須要一個目標棧幀,例如打印局部變量值的命令)安全

    1.在棧幀之間切換

frame args 將當前棧幀設置爲args(編號或Address)指定的棧幀,並打印該棧幀的簡要信息。less

up n 向上回退n個棧幀(更外層),n默認爲1.
down n 向下前進n個棧幀(更內層),n默認爲1.函數

2.打印棧幀信息(不移動棧幀)
  • frame 打印當前棧幀的簡要信息。
  • info frame 打印當前棧幀的詳細信息。
  • info frame args 打印指定棧幀的詳細信息。
  • info args 打印函數參數信息。
  • info locals 打印當前可訪問的局部變量的信息。學習

    3.打印調用堆棧
  • backtrace 打印所有棧幀的簡要信息,按Ctrl-c可終止打印。
  • backtrace n 打印最內層的n個棧幀的簡要信息。
  • backtrace -n 打印最外層的n個棧幀的簡要信息。
  • backtrace full 打印所有棧幀的詳細信息。
  • backtrace full n 打印最內層的n個棧幀的詳細信息。
  • backtrace full -n 打印最外層的n個棧幀的詳細信息。操作系統

教材學習中的問題和解決過程

  • 練習中關於改變push $0xff的指令後綴,請教同窗後明白對於棧操做都是雙字操做,因此無論是pop仍是push都應該使用pushl和popl

代碼調試中的問題和解決過程

代碼託管

https://gitee.com/gaoziyun11/Linux/tree/master/%E7%AC%AC%E4%BA%94%E5%91%A8

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 2/4 18/38
第三週 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
相關文章
相關標籤/搜索