用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
hjzhao的公告
< <a href="http://getfirefox.com/" title="Get Firefox - Take Back the Web"><img src="http://www.mozilla.org/products/firefox/buttons/takebacktheweb_large.png" width="185" height="72" border="0" alt="Get Firefox"></a> <a target=blank href=tencent://message/?uin=22447850&Site=http://blog.csdn.net/hjzhao/&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:22447850:11 alt="点击这里给我发消息"></a>
文章分类
Embedded Linux
absurd的专栏(RSS)
linuxsir 论坛
Linux中坚站
NAND FLASH坏区处理--阿龙的笔记
szricky's blog
青龙山庄
nand flash
欢迎光临zhtek的博客
存档

原创  汇编语言学习笔记 使用Linux系统调用 收藏

一、linux系统调用

系统调用定义在:/usr/include/asm/unistd.h

通常可以在man页的第二部分查看说明。

e.g.
$man 
2 exit

 二、使用系统调用

1、系统调用的格式

启动系统调用需要使用INT指令,Linux系统调用位于中断0x80。执行INT指令时,所有操作转移到内核中的系统调用处理程序,系统调用完成时,执行转移回INT指令后的下一条指令。

2、系统调用值

EAX寄存器用于保存系统调用值

e.g.
movl    $
1,%eax
int        0x80

3、系统调用输入值

系统调用期望的输入值顺序:

  • EBX          第一个参数
  • ECX         第二个参数
  • EDX         第三个参数
  • ESI           第四个参数
  • EDI          第五个参数

当输入参数超过6个时,EBX用于保存指向输入参数内存 位置的指针,输入参数按照堆栈顺序存放

4、系统调用返回值

系统调用返回值存放在EAX寄存器中,程序员负责检查EAX寄存器的值。

5、使用复杂数据类型

有时系统调用返回涉及C样式结构的复杂数据。在汇编语言程序中使用它们时,有时候难以决定如何处理返回的C结构,以及如何把它转换为汇编语言能够处理的数据类型。

必须在内存位置创建这个结构,以便值可以被函数返回。

.section .data
result:
uptime:
        .
int 0
load1:
        .
int 0
load5:
        .
int 0
.................
.................
movl $result,
%ebx
movl $
116,%eax
int     $0x80
.................
.................

系统调用system的系统调用值116被存放在EAX寄存器中,标签result的内存位置存储在EBX寄存器中作为输入值。执行INT指令之后,返回值被加载到这个内存位置中,各个内存标签可以用于引用每个单独的值

三、跟踪系统调用

使用strace程序

$strace ./systemcalltest
$strace 
-c ./systemcalltest

四、系统调用和C库

1、使用C库函数

C库函数包含在libc库中,使用c库函数时必须把libc连接到汇编程序中

$as -o cfunctest.o cfunctest.s
$ld 
-dynamic-linker /lib-/ld-linux.so.2 -lc -o  cfunctest cfunctest.o

2、系统调用和c库的比较

使用原始Linux系统调用的主要原因

  • 可以创建尽可能短的代码
  • 可以创建尽可能快的代码
  • 连接后的可执行文件独立于任何外部库

使用c库的主要原因

  • c库包含很多函数,模拟它们需要大量汇编代码
  • c库在操作系统间是可以移植的
  • c库在可以在程序间利用共享库,减少内存需求

发表于 @ 2007年05月21日 17:43:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:汇编语言学习笔记--使用函数 | 新一篇:AT&T汇编

  • 发表评论
  • 评论内容:
  •  
Copyright © hjzhao
Powered by CSDN Blog