1. 程式人生 > >linux彙編之程式結構

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]# vim cpuid.s
[[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指向裝置的分割槽結構。如果該結構代表裝置,則其成員