64位汇编之linux系统调用
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系统调用相关推荐
- Mac OS X下64位汇编与Linux下64位汇编的一些不同
1 首先系统调用号大大的不同:mac64和linux32的系统调用号也不同(虽然局部可能有相同) 2 mac64的系统调用号在: /usr/include/sys/syscall.h 可以查到,但是调 ...
- 第19部分- Linux x86 64位汇编GDB单步调试
第19部分- Linux x86 64位汇编GDB单步调试 本篇我们使用gdb来调试上篇中的汇编代码. gdb调试 使用gdb进行调试. #gdb ./addsum_arg 设置参数: (gdb) s ...
- 第41部分-Linux x86 64位汇编MMX使用
第41部分-Linux x86 64位汇编MMX使用 使用MMX架构需要一下步骤 从整数值创建打包整数值 把打包整数值加载到MMX寄存器中 对打包整数值执行MMX数学操作. 从MMX寄存器获得结果放到 ...
- 第77部分- Linux x86 64位汇编 优化编译器代码
第77部分- Linux x86 64位汇编 优化编译器代码-O1/-O2/-O3 仅仅使用汇编语言代码替换C或者C++不会必然使得程序执行的更好,因为编译器已经把所有高级语言代码都转化成了汇编语言. ...
- visual studio 64位汇编 listing列表文件
编写64位汇编与32位汇编步骤一样,但要增加一步 右键项目找到属性弹出窗口,如下图所示 在visual studio中生成列表文件 右键项目找到属性弹出窗口,如下图所示
- 发行版中的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各自含义 ...
- Win10 64位 汇编环境的搭建: 安装配置 DOSBOX、MASM
win10 cmd没有debug模式 需要进入 debug 调试模式下学习汇编语言时,会出现类似以下的错误提示: 这是因为他们使用的是 64 位的 Windows 系统(Win 7,Win 8 以及 ...
- linux是32还是64位,如何看linux是32位还是64位
查看linux是多少位的几位方法: 查看linux机器是32位还是64位的方法: 方法一: file /sbin/init 或者 file /bin/ls 结果如下: /sbin/init: ...
- linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...
最新文章
- C# 创建控制台应用程序
- Python安装、配置图文详解
- 线段树合并复杂度证明
- 第一百二十八期:推荐几个IDEA插件,Java开发者撸码利器,你get到了吗
- CentOS7搭建NTP服务器
- poj 1287 Networking 最小生成树 Kruskal Prim
- 不可描述⁄( ⁄•⁄ω⁄•⁄ )⁄!亚马逊用机器学习找有声书中情色片段
- Win7下安装Flash低版本
- python背景颜色代码大全_Python实现转换图片背景颜色代码
- rocketmq获取消息id_贞炸了!上线之后,消息收不到了
- 利用朴素贝叶斯算法解决“公园凉鞋问题”
- ESXI 通过naa在主机上找到物理磁盘的位置
- Rockchip开发系列 - 3.2.引脚配置默认上拉下拉
- 企业微信加密消息体_无代码开发能保障企业系统数据的安全吗?这篇文章为你全面解析!...
- 工厂设计模式 - 详解
- 会声会影2022新版本视频图文教程介绍
- [思考的乐趣] 有趣的莫比乌斯带
- MySQL数据库之约束
- android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析
- Unity3D优化技巧系列一
热门文章
- Educational Codeforces Round 11A. Co-prime Array 数学
- Filter Effects - 使用 CSS3 滤镜处理图片
- QTime使用中遇到的”not enough actual parameters for macro 'min'“问题
- div+css如何让一行内的文字两端对齐?
- 获取某字符 之后 之前
- 项目开发中关于jquery中出现问题小结(textarea,disabled,关键字等)
- 设置Adobe Air应用程序属性
- Solr5.4.0+Tomcat+mmseg4j
- Delphi中Chrome Chromium、Cef3学习笔记(二)
- Linux系统下的数据镜像备份工具——Rsync