日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ATT格式汇编语言

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ATT格式汇编语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.編譯與鏈接

方法一:使用as

#as -o test.o test.s

#ld -o test test.o

方法二:使用gcc

#gcc -o test test.s

gnu連接器查找_start標簽以確定程序的開始,但gcc查找main標簽,所以使用gcc要把 _start改為main

2.調試

#as -gstabs -o test.o test.s

#ld -o test test.o

參考:GDB調試--以匯編語言為例

3.定義數據

數據段

使用.data命令聲明 標簽+命令

.ascii 文本字符串

.asciz 以空字符結尾的文本字符串

.int 32位整數 .short 16位整數

.float 單精度浮點數 .double 雙精度浮點數

.quad 8字節整數

例如:

.section .data
output:
.ascii "This is a string"
height:
.int 78
length:
.int 34,79,90

靜態符號

equ命令用于把常量值設置為可以在文本段中使用的符號

例如:

.equ linux_sys_call ,0x80

使用靜態數據要加$

movl $linux_sys_call ,%eax

BSS段

.comm 聲明未初始化的數據的通用內存區域

.lcomm 聲明未初始化的數據的本地通用內存區域(為不會從本地匯編代碼之外進行訪問的數據保留的)

例如:

.section .bss

.lcomm buffer ,1000

把 1000字節的內存區域賦值給buffer標簽

一個程序本質上都是由 bss段、data段、text段三個組成的

在采用段式內存管理的架構中(比如intel的80x86系統),bss段(Block Started by Symbol segment)通常是指用來存放程序中未初始化的全局變量的一塊內存區域,一般在初始化時bss 段部分將會清零。bss段屬于靜態內存分配,即程序一開始就將其清零了。

比如,在C語言之類的程序編譯完成之后,已初始化的全局變量保存在.data 段中,未初始化的全局變量保存在.bss 段中。

參考:關于text段、data段和bss段以及堆棧

3.nop

空指令即空操作

4.cpuid

cpuid指令運行之后,分散在3個寄存器ebx,edx,ecx

(gdb) p/c $bx
$18 = 71 'G'
(gdb) p/c $bl
$19 = 71 'G'
(gdb) p/c $bh
$20 = 101 'e'
(gdb) p/c $cl
$21 = 110 'n'
(gdb) p/c $ch
$22 = 116 't'
(gdb) p/c $ecx
$23 = 110 'n'
(gdb) p/c $dh
$24 = 110 'n'
(gdb) p/c $dl
$25 = 105 'i'

5.linux系統調用

movl $1, %eax
movl $0, %ebx
int $0x80;從linux內核訪問控制臺顯示,使用int生成軟中斷,linux內核提供

參考:匯編語言Linux系統調用

6.指針

.section .data
output:
.ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"
.section .text
.globl _start
_start:
movl $0, %eax
cpuid
movl $output, %edi ;output標簽的內存位置加載到edi寄存器中
movl %ebx, 28(%edi);ebx寄存器中的內容按照edi指針放到內存的指定位置。括號外的數字表示相對于output標簽放置數據的位置,這個數字和edi寄存器中的地址相加
movl %edx, 32(%edi)
movl %ecx, 36(%edi)

The processor Vendor ID is 'GenuineIntel'

7.使用C庫函數

printf

--《未完》--

總結

以上是生活随笔為你收集整理的ATT格式汇编语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。