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

来源:http://blog.chinaunix.net/uid-23745546-id-3061344.html

64位汇编之linux系统调用相关推荐

  1. Mac OS X下64位汇编与Linux下64位汇编的一些不同

    1 首先系统调用号大大的不同:mac64和linux32的系统调用号也不同(虽然局部可能有相同) 2 mac64的系统调用号在: /usr/include/sys/syscall.h 可以查到,但是调 ...

  2. 第19部分- Linux x86 64位汇编GDB单步调试

    第19部分- Linux x86 64位汇编GDB单步调试 本篇我们使用gdb来调试上篇中的汇编代码. gdb调试 使用gdb进行调试. #gdb ./addsum_arg 设置参数: (gdb) s ...

  3. 第41部分-Linux x86 64位汇编MMX使用

    第41部分-Linux x86 64位汇编MMX使用 使用MMX架构需要一下步骤 从整数值创建打包整数值 把打包整数值加载到MMX寄存器中 对打包整数值执行MMX数学操作. 从MMX寄存器获得结果放到 ...

  4. 第77部分- Linux x86 64位汇编 优化编译器代码

    第77部分- Linux x86 64位汇编 优化编译器代码-O1/-O2/-O3 仅仅使用汇编语言代码替换C或者C++不会必然使得程序执行的更好,因为编译器已经把所有高级语言代码都转化成了汇编语言. ...

  5. visual studio 64位汇编 listing列表文件

    编写64位汇编与32位汇编步骤一样,但要增加一步 右键项目找到属性弹出窗口,如下图所示 在visual studio中生成列表文件 右键项目找到属性弹出窗口,如下图所示

  6. 发行版中的i386/i686/x86-64的区别: i386用来处理32位系统,i686是i386的下集;x86-64用来处理64位系统。 linux发行版中的i386/i686/x86-64各自含

    发行版中的i386/i686/x86-64的区别: i386用来处理32位系统,i686是i386的下集:x86-64用来处理64位系统. linux发行版中的i386/i686/x86-64各自含义 ...

  7. Win10 64位 汇编环境的搭建: 安装配置 DOSBOX、MASM

    win10 cmd没有debug模式 需要进入 debug 调试模式下学习汇编语言时,会出现类似以下的错误提示: 这是因为他们使用的是 64 位的 Windows 系统(Win 7,Win 8 以及 ...

  8. linux是32还是64位,如何看linux是32位还是64位

    查看linux是多少位的几位方法: 查看linux机器是32位还是64位的方法: 方法一: file /sbin/init    或者   file /bin/ls 结果如下: /sbin/init: ...

  9. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])

    linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...

最新文章

  1. C# 创建控制台应用程序
  2. Python安装、配置图文详解
  3. 线段树合并复杂度证明
  4. 第一百二十八期:推荐几个IDEA插件,Java开发者撸码利器,你get到了吗
  5. CentOS7搭建NTP服务器
  6. poj 1287 Networking 最小生成树 Kruskal Prim
  7. 不可描述⁄( ⁄•⁄ω⁄•⁄ )⁄!亚马逊用机器学习找有声书中情色片段
  8. Win7下安装Flash低版本
  9. python背景颜色代码大全_Python实现转换图片背景颜色代码
  10. rocketmq获取消息id_贞炸了!上线之后,消息收不到了
  11. 利用朴素贝叶斯算法解决“公园凉鞋问题”
  12. ESXI 通过naa在主机上找到物理磁盘的位置
  13. Rockchip开发系列 - 3.2.引脚配置默认上拉下拉
  14. 企业微信加密消息体_无代码开发能保障企业系统数据的安全吗?这篇文章为你全面解析!...
  15. 工厂设计模式 - 详解
  16. 会声会影2022新版本视频图文教程介绍
  17. [思考的乐趣] 有趣的莫比乌斯带
  18. MySQL数据库之约束
  19. android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析
  20. Unity3D优化技巧系列一

热门文章

  1. Educational Codeforces Round 11A. Co-prime Array 数学
  2. Filter Effects - 使用 CSS3 滤镜处理图片
  3. QTime使用中遇到的”not enough actual parameters for macro 'min'“问题
  4. div+css如何让一行内的文字两端对齐?
  5. 获取某字符 之后 之前
  6. 项目开发中关于jquery中出现问题小结(textarea,disabled,关键字等)
  7. 设置Adobe Air应用程序属性
  8. Solr5.4.0+Tomcat+mmseg4j
  9. Delphi中Chrome Chromium、Cef3学习笔记(二)
  10. Linux系统下的数据镜像备份工具——Rsync