64位彙編之linux系統呼叫

2021-10-10 13:53:21 字數 851 閱讀 6204

linux系統中64位彙編和32位彙編的系統呼叫主要有以下不同:

(1)系統呼叫號不同.比如x86中sys_write是4,sys_exit是1;而x86_64中sys_write是1, sys_exit是60。linux系統呼叫號實際上定義在/usr/include/asm/unistd_32.h和/usr/include/asm/unistd_64.h中。

(2)系統呼叫所使用的暫存器不同,x86_64中使用與eax對應的rax傳遞系統呼叫號,但是  x86_64中分別使用rdi/rsi/rdx傳遞前三個引數,而不是x86中的ebx/ecx/edx。

(3)系統呼叫使用「syscall」而不是「int 80」。

乙個簡單的輸出命令列引數的程式

.text

.globl _staet

_staet:

popq %rsi

vnext:

popq %rsi

test %rsi, %rsi

jz exit

movq %rsi, %rdi

xorq %rdx, %rdx

strlen:

movb (%rdi), %al

inc %rdx

inc %rdi

test %al, %al

jnz strlen

movb $10, -1(%rdi)

movq $1, %rax

movq $1, %rdi

syscall

jmp vnext

exit:

movq $60, %rax

movq $0, %rdi

syscall

ret

linux下64位彙編的系統呼叫 1

現在基本上系統都是64位了,而64位系統下的彙編和32位有了較大的變化,無論是系統呼叫的介面還是c標準庫的介面都和32位彙編有所不同 下面簡單談一下在64位linux下如何利用彙編直接呼叫系統呼叫。需要準備的有 1.一台linux機器 我的系統是ubuntu 14.10 x64版 2.還要乙個彙編器...

linux下64位彙編的系統呼叫 1

現在基本上系統都是64位了,而64位系統下的彙編和32位有了較大的變化,無論是系統呼叫的介面還是c標準庫的介面都和32位彙編有所不同 下面簡單談一下在64位linux下如何利用彙編直接呼叫系統呼叫。需要準備的有 1.一台linux機器 我的系統是ubuntu 14.10 x64版 2.還要乙個彙編器...

linux下64位彙編的系統呼叫 3

背景知識基本交代清楚了,下面我們實際寫乙個小例子看一下。的功能很簡單,顯示一行文字,然後退出。我們使用了syscall中的write和exit呼叫,查一下前面的呼叫號和引數,我們初步總結如下 write 即sys write 呼叫號為1,需傳遞3個引數 unsigned int fd const c...