成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux下的匯編語言之系統調用

運維 系統運維
匯編語言是基本的語言之一,他的明顯優勢是速度快,可以直接對硬件進行操作。Linux下如何使用匯編語言,語法格式有哪些?需要使用哪些開發工具?本文將會為大家詳細道來。

      作為最基本的編程語言之一,匯編語言雖然應用的范圍不算很廣,但重要性卻勿庸置疑,因為它能夠完成許多其它語言所無法完成的功能。就拿 Linux 內核來講,雖然絕大部分代碼是用 C 語言編寫的,但仍然不可避免地在某些關鍵地方使用了匯編代碼,其中主要是在 Linux 的啟動部分。由于這部分代碼與硬件的關系非常密切,即使是 C 語言也會有些力不從心,而匯編語言則能夠很好揚長避短,***限度地發揮硬件的性能。

第三課時:Linux 系統調用

  即便是最簡單的匯編程序,也難免要用到諸如輸入、輸出以及退出等操作,而要進行這些操作則需要調用操作系統所提供的服務,也就是系統調用。除非你的程序只完成加減乘除等數學運算,否則將很難避免使用系統調用,事實上除了系統調用不同之外,各種操作系統的匯編編程往往都是很類似的。

  在 Linux 平臺下有兩種方式來使用系統調用:利用封裝后的 C 庫(libc)或者通過匯編直接調用。其中通過匯編語言來直接調用系統調用,是***效地使用 Linux 內核服務的方法,因為最終生成的程序不需要與任何庫進行鏈接,而是直接和內核通信。

  和 DOS 一樣,Linux 下的系統調用也是通過中斷(int 0x80)來實現的。在執行 int 80 指令時,寄存器 eax 中存放的是系統調用的功能號,而傳給系統調用的參數則必須按順序放到寄存器 ebx,ecx,edx,esi,edi 中,當系統調用完成之后,返回值可以在寄存器 eax 中獲得。

  所有的系統調用功能號都可以在文件 /usr/include/bits/syscall.h 中找到,為了便于使用,它們是用 SYS_ 這樣的宏來定義的,如 SYS_write、SYS_exit 等。例如,經常用到的 write 函數是如下定義的:

  ssize_t write(int fd, const void *buf, size_t count);

  該函數的功能最終是通過 SYS_write 這一系統調用來實現的。根據上面的約定,參數 fb、buf 和 count 分別存在寄存器 ebx、ecx 和 edx 中,而系統調用號 SYS_write 則放在寄存器 eax 中,當 int 0x80 指令執行完畢后,返回值可以從寄存器 eax 中獲得。

  或許你已經發現,在進行系統調用時至多只有 5 個寄存器能夠用來保存參數,難道所有系統調用的參數個數都不超過 5 嗎?當然不是,例如 mmap 函數就有 6 個參數,這些參數***都需要傳遞給系統調用 SYS_mmap:

  void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);

  當一個系統調用所需的參數個數大于 5 時,執行int 0x80 指令時仍需將系統調用功能號保存在寄存器 eax 中,所不同的只是全部參數應該依次放在一塊連續的內存區域里,同時在寄存器 ebx 中保存指向該內存區域的指針。系統調用完成之后,返回值仍將保存在寄存器 eax 中。

  由于只是需要一塊連續的內存區域來保存系統調用的參數,因此完全可以像普通的函數調用一樣使用棧(stack)來傳遞系統調用所需的參數。但要注意一點,Linux 采用的是 C 語言的調用模式,這就意味著所有參數必須以相反的順序進棧,即***一個參數先入棧,而***個參數則***入棧。如果采用棧來傳遞系統調用所需的參數,在執行int 0x80 指令時還應該將棧指針的當前值復制到寄存器 ebx中。

【編輯推薦】

  1. 2.3 用匯編語言編寫程序
  2. 術語匯編 基本CSS濾鏡概述
  3. 琢石成器—Windows環境下32位匯編語言程序設計
  4. 3.1.3 as86匯編語言程序的編譯和鏈接
  5. 3.1.2 as86匯編語言程序
  6. 3.1.1 as86匯編語言語法
  7. 3.2.6 as匯編命令

 

責任編輯:zhaolei 來源: 網絡轉載
相關推薦

2011-01-14 14:22:50

Linux匯編語言

2011-01-14 14:08:17

Linux匯編語言

2011-01-14 14:39:32

Linux匯編語言

2011-01-14 13:44:45

Linux匯編語言

2018-01-11 14:58:40

2021-03-25 13:05:56

網絡安全寄存器匯編語言

2012-02-09 09:00:54

匯編語言

2021-06-11 10:02:39

語言編程開發

2011-01-04 17:08:10

匯編語言

2010-11-09 09:51:52

匯編語言

2022-10-31 14:02:24

匯編語言神經網絡

2023-11-23 08:25:40

開發人員SmaliAndroid

2011-07-21 09:59:26

JavaScript

2023-06-01 16:27:34

匯編語言函數

2009-06-14 21:54:37

動態語言Java腳本API

2017-01-12 22:36:30

2022-04-22 15:06:59

C++PythonJava

2012-02-13 10:03:31

編程開發

2010-06-13 15:35:01

2012-08-13 14:13:46

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九久久精品视频 | 蜜桃av一区二区三区 | 国产精品视频中文字幕 | 亚洲国产精品一区二区久久 | 在线国产一区 | 国产成人在线一区二区 | 亚洲精品一区二区二区 | 国产精品永久免费 | 欧美国产91| 亚洲另类春色偷拍在线观看 | 天堂久久一区 | 欧美激情一区二区三区 | 中文字幕av一区 | 国产高清区 | 亚洲久视频 | 亚洲a视频 | www.久久国产精品 | 91精品久久久久久久久久小网站 | 中文字幕在线一 | 中文字幕日韩一区 | 女女百合av大片一区二区三区九县 | 精品一区二区三区在线观看 | 国家一级黄色片 | 国产精品1区2区 | 亚洲免费人成在线视频观看 | 国产精品99久久久久 | 欧美精品在线观看 | 国产在线一区二区 | 天天草夜夜骑 | 久久综合九九 | 成人小视频在线 | 成人精品系列 | 一区中文字幕 | 国产精品久久久久久久久久久久 | 亚洲二区精品 | 精品视频一区二区三区在线观看 | 精品国产伦一区二区三区观看体验 | 日韩天堂av | 亚洲综合二区 | 亚洲精品一区二区 | 中文字幕乱码亚洲精品一区 |