---
# System prepended metadata

title: Assembly Language

---

# Assembly Language
  - GDB Debug
  - CMake compile


[toc]
## 安裝
  - JWasm https://stackoverflow.com/a/56268268

## CMake配置問題
https://blog.csdn.net/xx352890098/article/details/78819852

## Debug
### GDB指令
  - run 設定完中斷點輸入run（或簡寫r）可開始執行，執行到中斷點停止。
  - b 如果要在程式裡面加入中斷點，輸入break（或簡寫b）或是指定某一行停下來
  - s <file> 從指定文件中讀取符號表。
  - n 如果要繼續執行下一行可輸入next（或簡寫n）
  - bt 顯示程式堆棧信息
  - c 輸入c則執行到下一個中斷點為止
  - q 不顯示版本和版權信息
  - finish 函數會繼續執行完，並且打印返回值，然後等待輸入接下來的命令
  - print 顯示expression的值
### gdb-peda

![](https://i.imgur.com/xVaJSdy.png)
1.   暫存器（Register）是cpu用來暫存指令、數據和RAM地扯
2.   組合語言代碼
3.   記憶體有一部份是stack，宣告變數的時候就會佔用stack RAM

## 前置基本概念
![](https://i.imgur.com/NQ2zEJI.png)
- 組合語言轉成執行檔需要什麼過程？
    Ans:組譯後鏈接到其他目標文件
    
- 解釋組譯器是什麼？
    Ans:組合語言轉換成機械語言
    
- 解釋連結器是什麼？
    Ans:會連結其他目的檔或者函數庫
    
- 0xDEADBEEF
    Little-Endian記憶體位置
    ![](https://i.imgur.com/lwWBOOp.png)
    
    Big-Endian記憶體位置
    ![](https://i.imgur.com/OzASNqU.png)

- 32-bit general-purpose registers 有哪些？
    ![](https://i.imgur.com/dI6mnQw.png)

     分別對映的 16-bit registers 又有哪些?
     ![](https://i.imgur.com/4zEprJR.png)  
     ![](https://i.imgur.com/3013iBV.png)
     
- RIP 與 EIP 的差異？
    RIP是64bit用
    EIP是32bit用
    
    ![](https://i.imgur.com/KI4UTQp.png)

- EFLAGS Register 可以幹麻? Status Flags 有哪些？
  Ans:EFLAGS Register是控制標誌和系統標誌的寄存器

  Parity flag (PF)
  Auxiliary Carry flag (AC) 
  Zero flag (ZF)
  Sign flag (SF)
  Overflow flag (OF)
  Carry flag (CF)
  
- listing file 欄位所代表的含意
  listing file包含源代碼，包括行數，每條指令的數字地址，每條指令的機器   代碼字節（以十六進製表示）以及符號表。
