unix 汇编程序入门

有两种方式执行系统调用:使用c库,或者直接系统调用。c库的函数并不全部是系统调用外包,例如printf,malloc。直接的内核调用,更快速的获得内核服务。
linux下的使用方法,eax中放调用号,可以在asm/unistd.h中查到。可传递6个参数,ebx,ecx,edx,esi,edi,ebp。如果还有更多的参数,他们将被简单的传成结构体作为第一个参数。返回值放在eax中。没有使用到栈。

section    .text
    global _start            ;must be declared for linker (ld)

_start:                    ;tell linker entry point

    mov    edx,len    ;message length
    mov    ecx,msg    ;message to write
    mov    ebx,1    ;file descriptor (stdout)
    mov    eax,4    ;system call number (sys_write)
    int    0x80    ;call kernel

    mov    eax,1    ;system call number (sys_exit)
    int    0x80    ;call kernel

section    .data

msg    db    'Hello, world!',0xa    ;our dear string
len    equ    $ - msg            ;length of our dear string


0xa代表'\n'
$ nasm -f elf hello.asm		# this will produce hello.o ELF object file
$ ld -s -o hello hello.o # this will produce hello executable

./hello运行
结果类似于
write(1,msg,len);

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(470) | 评论(0) | 转发(0) |
0

上一篇:中断

下一篇:linux下使用汇编语言

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值