易截截图软件、单文件、免安装、纯绿色、仅160KB

深入理解linux内核笔记六:linux系统调用

一般情况下,进程不能存取系统内核的,只有系统调用是一个例外,在intel结构的计算机中,是通过中断0x80实现的
进程可以可以跳转到内核中的位置是system_call。在此检查系统调用号,它告诉内核进程请求何种服务,然后查找系统调用表sys_call_table,找到希望调用的内核地址函数,调用此函数,然后返回。
      
1、  宏定义(unistd.h)
_syscallN(type,name,x…),N是系统调用所需参数数目,type是返回类型,name是面向用户的系统调用函数名,x…是参数,个数为N
如:#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
long __res; \
__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \
: "=a" (__res) \
: "0" (__NR_##name),"ri" ((long)(arg1)) : "memory"); \
__syscall_return(type,__res); \
}
分析:
ouput: _res 0%  __NR##name  “=a”表示存放在eax寄存器
       也就是表示把变量_res存放在eax中,“0”表示把_NR##name关联到0%即_res.返回值也存放在eax中.
 
       #define _syscall2(type,name,type1,arg1,type2,arg2) \
type name(type1 arg1,type2 arg2) \
{ \
long __res; \
__asm__ volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" \
       : "=a" (__res) \
       : "0" (__NR_##name),"ri" ((long)(arg1)),"c" ((long)(arg2)) \
              : "memory"); \
__syscall_return(type,__res); \
}
同理可以知道arg1存放在eax中,arg2存放在ebx中
 
当我们在程序中用到系统调用时,对于linux预定义的系统调用,编译器会在预处理时自动加入宏_syscallN()并将其展开,对于自己添加的系统调用,需要在程序中显示地调用宏_syscallN.
 
2         系统调用入口函数
在_syscallN()中执行了int 0x80后,程序进入内核态,我们在陷阱门和系统门的初始化里做了如下设置
set_system_gate(SYSCALL_VECTOR,&system_call);
程序跳到system_call(entry.s)处
ENTRY(system_call)
  &nb


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

Linux PAM Program/弹出获得root权限对话框

 什么也不要说,先来一个程序吧。
/*
注意要和你的系统一致redhat是这样/etc/pam.d/check_user
auth required /lib/security/pam_unix_auth.so
account required /lib/security/pam_unix_acct.so
1.如果需要出现密码弹出框还需要在添加
/etc/security/console.apps/check_user
USER=root
PROGRAM=~/check_use ......

Linux下CHM查看工具汇总

 Linux下CHM查看工具汇总

http://www.ossw.com.cn/bbs/bencandy.php?id=2252&l_page=1


1. chmsee

homepage: http://211.92.88.40/~zhong/

requires: gtkhtml, libgnomevfs
......

linux 命令

linux 挂载命令 : Mount 
http://www.zhiweinet.com/jiaocheng/2009-02/2602.htm
 
mount挂载命令使用方法:
 
mount -t 类型 -o 挂接方式 源 目标
 
-t 详细选项
  光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
  Windows 9x fat32文件系统:vfat
  Windows NT ntfs文件系统:n ......

Linux中的shell命令参数详解

命令行
     用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如:
  
  $ date
  
  二 11 23 01:34:58 CST 1999 
  
  $ 
  
  用户登录时,实际进入了shell,它遵循一定 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号