参见英文答案 >

What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code?1个

我有一个简单的64位汇编程序,用于打印’O’和’K’后跟换行符.

但是,’K’永远不会打印出来.程序的目标之一是将rax寄存器的低位中的值打印为ASCII字母.该程序专门用于64位Linux,用于教育目的,因此不需要使用C风格的系统调用.

我怀疑这个问题要么与移动QWORD [rsp],rax或mov rcx,rsp有关.

目前,该程序仅输出“O”后跟换行符.

如何更改程序以使其使用rax中的值然后打印“K”以使完整输出为“OK”,然后换行?

bits 64

section .data

o: db "O" ; 'O'

nl: dq 10 ; newline

section .text

;--- function main ---

global main ; make label available to the linker

global _start ; make label available to the linker

_start: ; starting point of the program

main: ; name of the function

;--- call interrupt 0x80 ---

mov rax,4 ; function call: 4

mov rbx,1 ; parameter #1 is 1

mov rcx,o ; parameter #2 is &o

mov rdx,1 ; parameter #3 is length of string

int 0x80 ; perform the call

;--- rax = 'K' ---

mov rax,75 ; rax = 75

;--- call interrupt 0x80 ---

sub rsp,8 ; make some space for storing rax on the stack

mov QWORD [rsp],rax ; move rax to a memory location on the stack

mov rax,rsp ; parameter #2 is rsp

mov rdx,1 ; parameter #3 is length of string

int 0x80 ; perform the call

add rsp,8 ; move the stack pointer back

;--- call interrupt 0x80 ---

mov rax,nl ; parameter #2 is nl

mov rdx,1 ; parameter #3 is length of string

int 0x80 ; perform the call

;--- exit program ---

mov rax,1 ; function call: 1

xor rbx,rbx ; return code 0

int 0x80 ; exit program

linux 80中断,在64位Linux上使用中断0x80相关推荐

  1. linux内核高分辨率定时器,64位Linux上的高分辨率定时器支持

    我试图在2.6.39.1 64位Linux上启用高分辨率定时器支持.为此,我首先在.config中设置CONFIG_HIGH_RES_TIMERS=y.64位Linux上的高分辨率定时器支持 而且,g ...

  2. 【转】将 Linux 应用程序移植到 64 位系统上

    原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...

  3. linux 内存使用很大,在32位和64位Linux上,为什么同一进程的pmap的内存使用量会有很大差异?...

    我正在设置一台新服务器(64位Debian),并试图使apache进程尽可能小,从而禁用了我不需要的任何模块.然后,我将pmap输出与32位Debian机器上的apache进行了比较,并打开了更多模块 ...

  4. linux上运行gfortran,linux – gfortran:在64位系统中编译32位可执行文件

    我在AMD Athlon(tm)64 X2双核处理器5200×2上运行Ubuntu 12.10(64位), Linux内核3.5.0-51通用.我有GNU Fortran(Ubuntu / Linar ...

  5. matlab 64位 mex 32,C Mex文件在64位Linux上崩溃了matlab,但没有32位窗口崩溃,但程序在Matlab外运行正常...

    警告我在问题中提供的代码可能会使matlab和您的机器崩溃! 我已经为C类编写了一个mex网关函数 . 如果我使用R2008a在32Bit windows上编译这个mex函数我没有问题 . 如果我在运 ...

  6. 解决内联汇编64位Linux系统调用提示Bad Address

    在参考<Linux 下系统调用的三种方法>这篇文章的时候,前面的syscall()和chmod()两种方法完成系统调用chmod都可以正常执行. 但当我使用内联汇编时,程序执行提示errn ...

  7. 64位Linux下使用QQ

    因为官方QQ for linux 版本只用32位,所以在64位系统上运行需要相应的库支持. Ubuntu 执行以下命令: sudo apt-get install ia32-libs ia32-lib ...

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

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

  9. java 位运算取8位_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译

    Java 9 引入了 aot 编译方式,能够将 class 文件直接编译成可执行二进制文件.目前 Java 9 的 early access 版本已经提供了编译工具,让我们来看看它的功能吧. 注意:按 ...

最新文章

  1. 数据结构32:树存储结构
  2. RHCE笔记1-安裝
  3. C++ 11 中的POD
  4. python英文高频句统计_使用Python 统计高频字数的方法
  5. c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式
  6. excel表格从某个标志计算机,让Excel也玩多标签 多个图表一个窗口 -电脑资料
  7. jQuery的实现原理
  8. CompressAI:InterDigital开源基于学习的图像视频压缩研究库
  9. 干货满满!全面详解如何用递归解题!
  10. 一起来看小米发布会!
  11. 线程--匿名内部类实现多线程的2种方式
  12. 3dsMax中Vray渲染器法线贴图用法
  13. 手机无线网络为啥无法连接服务器,手机wifi打不开及手机WiFi连接上但不能上网,怎么办?...
  14. 国内域名如何转入 GoDaddy,域名转入GoDaddy要注意?
  15. 8.9.2 疯狂填词
  16. 【JZOJ 省选模拟】6638.Seat
  17. 学校的友宝自动售货机出故障 不知什么系统呵
  18. 遗传算法最通俗的讲解案例
  19. curl打开网页403或者302的解决方法(详细总结)
  20. 卡方检验在关联分析中的应用

热门文章

  1. android 手机 跑分榜,安兔兔跑分最新排行图 2020年4月Android手机性能榜
  2. Python 绘制散点图
  3. pandas使用笔记(一)导入,查看,读取数据
  4. JAVA 测试日期的不同显示格式
  5. 例子---PHP实现网页计数器
  6. 6_less中的匹配模式
  7. ES6_proxy_note
  8. python的多线程应用前景_什么是线程(多线程),Python多线程的好处
  9. java 内部类 作用_java内部类的作用分析
  10. python123百钱买百鸡_day01笔记-百钱买百鸡(100文钱,必须买100只鸡,有几种方式)