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...