linux 64 位汇编

1.用户模式的系统调用依次传递的寄存器为: 
rdi,rsi,rdx,rcx,r8和r9; 
2.内核接口的系统调用一次传递的寄存器为: 
rdi,rsi,rdx,r10,r8和r9;注意这里和用户模式的系统调用只有第4个寄存器不同,其他都相同。 
3.系统调用通过syscall指令进入,不像32位下的汇编使用的是int 0x80指令; 
4.系统调用号放在rax寄存器里; 
5.系统调用限制最多6个参数;
6.系统调用的返回结果,也就是syscall指令的返回放在rax寄存器中; 
7.只有整形值和内存型的值可以传递给内核

测试代码: 

.data
    msg : .string "Hello, World! Linux 64bit\n"
    len = . - msg
.text
.global _start

_start:
    mov $1, %rax    #write 系统调用
    mov $1, %rdi    #fd:1 stdout
    mov $msg, %rsi  #string msg
    mov $len, %rdx  #len 长度
    syscall

    mov $60, %rax  #exit 系统调用
    mov $0, %rdi   #参数
    syscall

 编译

as -o hello64.o  hello64.s
ld -s -o hello64 hello64.o

输出: 

Hello, World! Linux 64bit

 

32bit 寄存器64bit 寄存器
eaxrax
ebxrbx
ecxrcx
edxrdx
esirsi
edirdi
esprsp
ebprbp
 r8
 r9
 r10
 r11
 r12
 r13
 r14
 r15
eax(ax, ah, al)r8d ,r8w, r8b
32 , 16, 8, 832, 16, 8

 

转载于:https://my.oschina.net/tsh/blog/1457138

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值