組合語言學習筆記 使用Linux系統呼叫

2021-04-13 00:59:18 字數 1308 閱讀 2007

一、linux系統呼叫

系統呼叫定義在:/usr/include/a**/unistd.h

通常可以在man頁的第二部分檢視說明。

e.g.

$man 

2exit

二、使用系統呼叫

1、系統呼叫的格式

啟動系統呼叫需要使用int指令,linux系統呼叫位於中斷0x80。執行int指令時,所有操作轉移到核心中的系統呼叫處理程式,系統呼叫完成時,執行轉移回int指令後的下一條指令。

2、系統呼叫值

eax暫存器用於儲存系統呼叫值

e.g.

movl    $1,

%eax

int0x80

3、系統呼叫輸入值

系統呼叫期望的輸入值順序:

當輸入引數超過6個時,ebx用於儲存指向輸入引數記憶體 位置的指標,輸入引數按照堆疊順序存放

.section .data

result:

uptime:

.int0

load1:

.int0

load5:

.int0

.................

.................

movl $result,

%ebx

movl $

116,

%eax

int$

0x80

.................

.................

系統呼叫system的系統呼叫值116被存放在eax暫存器中,標籤result的記憶體位置儲存在ebx暫存器中作為輸入值。執行int指令之後,返回值被載入到這個記憶體位置中,各個記憶體標籤可以用於引用每個單獨的值

三、跟蹤系統呼叫

使用strace程式

$strace .

/systemcalltest

$strace 

-c .

/systemcalltest

四、系統呼叫和c庫

1、使用c庫函式

c庫函式包含在libc庫中,使用c庫函式時必須把libc連線到匯程式設計序中

$as-

o cfunctest.o cfunctest.s

$ld 

-dynamic

-linker 

/lib

-/ld

-linux.so.2-

lc -

o  cfunctest cfunctest.o

2、系統呼叫和c庫的比較

使用原始linux系統呼叫的主要原因

使用c庫的主要原因

組合語言學習筆記

學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...

組合語言學習筆記

cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...

組合語言學習筆記

編譯下面的程式,生成列表檔案,觀察標號在機器碼中變成了什麼?小組中的同學都說一說,說出你看到了什麼,說出你的疑問,讓小夥伴們一起解決。下面是程式 這個程式的功能沒有意義,只用於觀察程式中的標號 assume cs codesg,ds datasg datasg segment a db 1,2,3,...