一、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,...