linux彙編之程式結構
理論
程式組成: 資料段:是可選的,資料段宣告帶有初始值的資料元素,這些資料元素用作組合語言程式中的變數 bss段:是可選的,bss段宣告使用0或者null值初始化的資料元素,這些資料元素最常用作組合語言程式中的緩衝區。 文字段:所有的組合語言程式中都必須有文字段,這裡是可執行程式內宣告指令碼的地方。 定義段 gun彙編器使用.section命令語句宣告段。.section語句只使用一個引數---它宣告的段的型別。 有以下幾種段型別: .section .data .section .bss .section .text 定義起始點 當組合語言程式被轉換為可執行檔案時,聯結器必須知道指令碼中的起始點是什麼。 為了解決這一個問題,gun彙編器宣告一個預設標籤,或者說識別符號,它應該用作應用程式的入口點。 _start標籤用於表明程式應該從這條指令開始執行。 因此,組合語言的模版應該是這樣的: .section .data <initialized data here>.section .bss <uninitialized data here>
.section .text .globl _start _start: <instruction ode goes here>
除了在應用程式中宣告起始標籤這外,還需要為外部應用程式提供入口點。這就是使用.globl命令完成。 .globl命令宣告外部程式可以訪問的程式標籤。
例子
[[email protected] asm]# cat cpuid.s #cpud.s Sample program to extrac the processor Vendor ID .section .data output: .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n" #上面聲明瞭一個變數,變數名為output,並且其為ascii型別的字元,這一個字元是預定義的,是放到記憶體當中的。 .section .text .globl _start _start: movl $0,%eax #初始化eax暫存器為0 cpuid #執行cpuid命令 movl $output,%edi #這時output變數是指標,把output變數的記憶體位置載入到edi暫存器當中 movl %ebx, 28(%edi) movl %edx, 32(%edi) movl %ecx, 36(%edi) #上面是從三個寄存在器得到相應的值,分別放到變數的xxx位置上。 movl $4,%eax #指定eax的系統呼叫值,也就是指定系統呼叫函式,4代表著呼叫系統的write函式。 movl $1,%ebx #暫存器ebx指定要寫入的檔案描述符 movl $output,%ecx #暫存器ecx指定字串的開頭 movl $42, %edx #暫存器edx指定字串的長度 int $0x80 #生成一個0x80的軟中斷 movl $1, %eax #呼叫系統退出函式1(退出函式) movl $0, %ebx #暫存器ebx包含程式返回給shell的退出程式碼值。 int $0x80 #生成一個0x80的軟中斷
[[email protected] asm]# as -o cpuid.o cpuid.s [[email protected] asm]# ld -o cpuid cpuid.o [[email protected] asm]# ls cpuid cpuid.o cpuid.s [[email protected] asm]# ./cpuid The processor Vendor ID is 'GenuineIntel'
相關推薦
linux彙編之程式結構
理論 程式組成: 資料段:是可選的,資料段宣告帶有初始值的資料元素,這些資料元素用作組合語言程式中的變數 bss段:是可選的,bss段宣告使用0或者null值初始化的資料元素,這些資料元素最常用作組合語言程式中的緩衝區。 文字段:所有的組合語言程式中都必須有文字段,這裡是可
Javascript筆記(六)之程式結構與流程控制語句
一、程式結構簡介 1、幾個基本概念 程式結構分為順序結構、分支結構、迴圈結構,通常伴隨著這幾種程式結構存在的還有流程控制語句; 在ECMA-262規定來一組流程控制語句,語句定義了ECMAScript中的主要語法,語法通常由一個或多個關鍵字來完成給定的任務,例如
【第三篇】SAP ABAP7.50新語法之程式結構&SubScreen
原文地址:SAP ABAP7.50系列之程式結構&SubScreen 公眾號:SAP Technical 前言部分 我們知道,在SAP裡的程式結構包含了很多內容,比如:Global Declarations裡包含interface,classes,global data;Method裡包含loc
成員方法的引數之程式結構
在書上成員方法的引數章節(P133、P134),例項01、例項02的程式大致都採用了以下結構: public class xxx { public static void main(String [ ] args) { //成員變數 //最終結果輸出語句 } 成員方法 {
Linux學習之目錄結構和根檔案系統
目錄結構和根檔案系統 1、Linux結構 2、Linux檔案系統 (1)程式編譯方式 1、動態連結編譯:動態編譯的可執行檔案需要附帶一個動態連結庫,執行時呼叫連結庫中的庫檔案。 2、靜態連結編譯:在編譯時將庫檔案提出來放在該執行檔案中,不依賴動態連結庫 注意:庫檔案只有被呼叫
Groovy語言規範之程式結構
前言: 官方關於Programm Structure的介紹:Programm Structure 下文將會介紹Groovy的程式結構。 1.包名 Package names 這裡的包名同Java中的包名發揮著同樣的角色。包名允許我們分隔程式碼從而避免
python之程式結構
1、控制結構 if a>b: #註釋 ,多行註釋可以用 '''多行註釋''' result=a-b elif a<b: result=b-a
Go Web 程式設計之 程式結構
概述 一個典型的 Go Web 程式結構如下,摘自《Go Web 程式設計》: 客戶端傳送請求; 伺服器中的多路複用器收到請求; 多路複用器根據請求的 URL 找到註冊的處理器,將請求交由處理器處理; 處理器執行程式邏輯,必要時與資料庫進行互動,得到處理結果; 處理器呼叫模板引擎將指定的模板和上一步得到
linux shell script程式之選擇結構簡介
很多人都是先學習C/C++語言, 然後再學習shell script的。 如果大家有一點點程式設計基礎, 那麼就很容易理解所謂的順序、選擇和迴圈。順序結構其實沒什麼好說的, 之前早就接觸過了, 在本文中, 我們來介紹一下選擇結構。 雖然簡單, 但還是要熟練正
Linux學習之三:文件夾系統的結構和相對(絕對)路徑
sharp 二進制 沒有 數據 csharp pan 用戶 ont 臨時 理解每個目錄的作用 bin 二進制文件 boot 系統的啟動文件、內核 dev 設備文件 etc 配置文件 home 用戶的家目錄 lib 鏈接庫文件 l
Linux之目錄結構配置
四種 sco 放置 相關 用途 lib64 sysconfig 要花 -- 因為 Linux 的開發者實在太多了,如果每個人都發展出屬於自己的目錄配置方法, 那麽將可能會造成很多管理上的困擾。所以,就有一個叫做Filesystem Hierarchy Standard (F
java之程式的異常體系結構,實習面試點
java之程式的異常體系結構 1. 程式中的異常 2. java異常層次體系結構圖 3. java異常的體系結構,實習面試點 java異常程式碼體會 1. 程式中的異常 不可避免的異常,在系統的
彙編小程式之向螢幕中列印內容
其他的一些內容省略,直接來程式的主體 ;名稱:show_str ;功能:在指定的的位置,用指定的顏色, ; 顯示一個用0結束的字串 ;引數:(dh)=行號(取值範圍0-24),(dl)=列號(取值範圍0-79) (cl)=顏色屬性,ds:si指向
Linux 環境程式設計—可執行程式結構與程序結構
Linux可執行檔案結構 在 Linux 下,程式是一個普通的可執行檔案,以下列出一個二進位制可執行檔案的基本情況: 可以看出,此可執行檔案在儲存時(沒有調入到記憶體前)分為程式碼區(text)、資料區(data)和未初始化資料區(bss)3 個部分。各段基本內容說明如下: 程式碼區:
【Kaggle-MNIST之路】自定義程式結構(七)
簡述 這一篇跟這個系列的其他文章不一樣,這個是重新安排下程式結構 結構如下: 其中model這個模型專門放模型就好了 model/init.py中不用寫就好了。 model/CNN.py中的內容 模型是基於之前的【Kaggle-MNIS
JavaWeb 之 tomcat與web程式結構與Http協議
Tomcat伺服器 和 HTTP協議 **WEB開發簡介** * 當前網路上兩種架構 * C/S Client/Server 客戶端/伺服器 需要下載客戶端軟體 例子:QQ 快播
自己動手編寫一個Linux偵錯程式系列之4 ELF檔案格式與DWARF除錯格式
目錄 在上一節中,你已經聽說了DWARF除錯格式,它是程式的除錯資訊,是一種可以更好理解原始碼的方式,而不只是解析程式。今天我們將討論原始碼級除錯資訊的細節,以準備在本教程後面的部分中使用它。 系列索引 準備工作 斷點的設定 暫存器和記憶體 ELF檔案格式
Linux裝置驅動程式架構分析之一個I2C驅動例項
作者:劉昊昱 核心版本:3.10.1 編寫一個I2C裝置驅動程式的工作可分為兩部分,一是定義和註冊I2C裝置,即i2c_client;二是定義和註冊I2C裝置驅動,即i2c_driver。下面我們就以mini2440的I2C裝置at24c08 EEPROM為例,介紹如
Linux裝置驅動程式架構分析之I2C架構(基於3.10.1核心)
作者:劉昊昱 核心版本:3.10.1 I2C體系架構的硬體實體包括兩部分: 硬體I2C Adapter:硬體I2C Adapter表示一個硬體I2C介面卡,也就是I2C控制器。一般是SOC中的一個介面,也可以用GPIO模擬。硬體I2C Adapter主要用來在I2
Linux 驅動之塊裝置結構體 (二)
上回最後面介紹了相關資料結構,下面再詳細介紹 塊裝置物件結構 block_device 核心用結構block_device例項代表一個塊裝置物件,如:整個硬碟或特定分割槽。如果該結構代表一個分割槽,則其成員bd_part指向裝置的分割槽結構。如果該結構代表裝置,則其成員