.section .data
UserMsg:
.ascii "Please input the message:"
LenOfUserMsg:
.equ lenMsg, LenOfUserMsg - UserMsg
#.section .bss
# .lcomm resb,
OutputMsg:
.ascii "This is your input:"
LenOfOutputMsg:
.equ lenOutput, LenOfOutputMsg - OutputMsg
.section .bss
.lcomm resb, .section .text
.globl _start
_start:
#display UserMsg
movl $, %eax
movl $, %ecx
movl $UserMsg, %ecx
movl $lenMsg, %edx
int $0x80 #Read what input
movl $, %eax
movl $, %ebx
movl $resb, %ecx
movl $, %edx
int $0x80 #dispaly what you input
movl $, %eax
movl $, %ebx
movl $OutputMsg, %ecx
movl $lenOutput, %edx
int $0x80 movl $, %eax
movl $, %ebx
movl $resb, %ecx
movl $, %edx
int $0x80 movl $, %eax
movl $, %ebx
int $0x80

代码就是这样的。要做什么呢?

很简单:运行后,命令行提示你输入数字或者是字符,然后回车,把你输入的现实出来。

显然,这个用C语言实现起来简直太简单了。

但是,用汇编实现起来同样很简单。

==========知识准备============

在汇编中使用系统调用,只要是将系统调用号复制到eax寄存器。

可以看到每个系统调用都有一个系统调用号。

然后,系统调用必然要使用终端。这里使用的是软中断。int $0x80

比如,要使用exit这个系统调用

movl $1, %eax

int $0x80

某些系统调用有参数,怎么办呢?

在C样式函数中,输入参数存放在堆栈中;系统调用与之不同,需要输入参数被存放在寄存器中。每个输入值按照特定的顺序放到寄存器中。

简而言之。

按照顺序:

ebx  (第1个输入参数)

ecx   (第2个输入参数)

edx  (第3个输入参数)

esi   (第4个输入参数)

edi   (第5个输入参数)

具体的输入顺序,就取决于系统调用中参数的顺序。比如,write(fd, *buf, count)

那么,ebx就是fd,ecx就是*buf,edx就是count

=========程序代码简要说明=============

ebx:文件描述符

ecx:指向要写入的字符串的指针

edx:要写入的字符串长度

write系统调用的值是4,将它存到eax寄存器中。然后将各个参数存放到相应的寄存器中。

需要指出,Linux中,0表示标准输入一般是键盘,1表示标准输出一般是终端屏幕。

首先在终端屏幕打印字符,提示你输入。输入后,使用read存放到一个内存区域。

在使用,write将相应区域的输入值打印出来。

要指出的是,$UserMsg将标签的内存地址存放到ecx中,而不是将实际存放在内存中的值放在ecx中。

附录:

中断向量号

中断向量表

汇编语言调用Linux系统调用read和write的更多相关文章

  1. 使用 Linux 系统调用的内核命令【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-system-calls/ 探究 SCI 并添加自己的调用 Linux® 系统调用 —— 我们每天都在使 ...

  2. 【原创】xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. 1. 引出问题 上一篇文章xenomai内核解析--双核系统调用(一)以X86处理器为例,分析了xenomai内核调用的流程, ...

  3. Linux系统调用和库函数调用的区别

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思 ...

  4. linux系统调用和库函数调用的区别(转)

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).可以参考<Linux程序设计>(英文原版为<Beginning ...

  5. 关于Linux系统调用,内核函数【转】

    转自:http://blog.csdn.net/ubuntulover/article/details/5988220 早上听人说到某个程序的一部分是内核态,另一部分是用户态,需要怎么怎么.当时突然想 ...

  6. Linux系统调用(转载)

    目录: 1. Linux系统调用原理 2. 系统调用的实现 3. Linux系统调用分类及列表 4.系统调用.用户编程接口(API).系统命令和内核函数的关系 5. Linux系统调用实例 6. Li ...

  7. Linux系统调用的实现机制分析

    API/POSIX/C库的关系        系统调用的实现 3.1    系统调用处理程序 添加新系统调用 给Linux添加一个新的系统调用是件相对容易的工作.怎样设计和实现一个系统调用是难题所在, ...

  8. linux内核剖析(六)Linux系统调用详解(实现机制分析)

    本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系.然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递 ...

  9. Linux系统调用的运行过程【转】

    本文转自:http://blog.csdn.net/kernel_learner/article/details/7331505 在Linux中,系统调用是用户空间访问内核的唯一手段,它们是内核唯一的 ...

随机推荐

  1. SpringMyBatisDay02

    全篇概述:IOC    DI     参数值注入      注解依赖注入 1.Spring IOCIOC 全称Inversion Of Control,被翻译成控制反转控制反转指:程序中对象的获取方式 ...

  2. unp第七章补充之TCP半开连接与半闭连接

    半打开(Half-Open)连接和半关闭(Half-Close)连接.TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相对于全双工的"全&q ...

  3. python绘图之seaborn 笔记

    前段时间学习了梁斌老师的数据分析(升级版)第三讲<探索性数据分析及数据可视化>,由于之前一直比较忙没有来得及总结,趁今天是周末有点闲暇时间,整理一下笔记: 什么是seaborn Seabo ...

  4. Navicat 连接 Mysql8.0 出现2059问题的解决方法

    ``` 登陆Mysql后执行命令 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; ...

  5. 安全测试===sqlmap(壹)转载

    六.优化 这些参数可以优化Sqlmap的性能. 1.一键优化 参数:-o 添加此参数相当于同时添加下列三个优化参数: --keep-alive --null-connection --threads= ...

  6. seo标题关键字描述字数限制Title,keywords,description长度最长多长 ?

    seo标题关键字描述字数限制 seo优化各个搜索引擎收录Title,keywords,description长度最长多长 ?SEO网站优化中Title标签的作用为重中之重,好的Title也就成功了一半 ...

  7. Python之路----内置函数补充与匿名函数

    内置函数补充:reversed()保留原列表,返回一个反向的迭代器 l = [1,2,3,4,5] l.reverse() print(l) l = [1,2,3,4,5] l2 = reversed ...

  8. PHP多进程处理并行处理任务实例(转,备用)

    本文目的本文通过例子讲解linux环境下,使用php进行并发任务处理,以及如何通过pipe用于进程间的数据同步.PHP多进程通过pcntl_XXX系列函数使用多进程功能.注意:pcntl_XXX只能运 ...

  9. 20145334赵文豪《网络对抗》-逆向及Bof基础实践

    本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返 ...

  10. 20165310_获奖感想与Java阶段性学习总结

    获奖感想与Java阶段性学习总结 一.Learning By Doing ​ 在此之前,其实我并没有想到能够成为小黄杉的第一批成员之一,喜悦之余,也感受到了许多的压力.小黄杉一方面代表了老师对于我这一 ...