内核编程问题

翔云123456 2011-04-25 10:54:14
内核版本2.6.18.1
我现在想做的是,对通信的数据自动进行加密,解密,实现对应用层透明。
于是,我在net/socket.c中的sys_socketcall(),增加语句



mycipher_test("aes",0,(char *)a1,key);
printk("now in sys_socketcall sys_XXX,result=\n",);


说明:
mycipher_test("aes",0,(char *)a1,key);是加密函数,目前出于测试,mycipher_test只有语句printk("in cipher\n");



case SYS_SEND:

mycipher_test("aes",0,(char *)a1,key);
printk("now in sys_socketcall sys_send,result=\n");

err = sys_send(a0, (void __user *)a1, a[2], a[3]);
break;
case SYS_SENDTO:
mycipher_test("aes",0,(char *)a1,key);
printk("now in sys_socketcall sys_sendto,result=\n");
err = sys_sendto(a0,(void __user *)a1, a[2], a[3],
(struct sockaddr __user *)a[4], a[5]);
break;
case SYS_RECV:
mycipher_test("aes",0,(char *)a1,key);
printk("now in sys_socketcall sys_recv,result=\n");

err = sys_recv(a0, (void __user *)a1, a[2], a[3]);
break;
case SYS_RECVFROM:
mycipher_test("aes",0,(char *)a1,key);
printk("now in sys_socketcall sys_recvfrom,result=\n",);

err = sys_recvfrom(a0, (void __user *)a1, a[2], a[3],
(struct sockaddr __user *)a[4], (int __user *)a[5]);
break;





添加语句完成后,我编译内核,启动新内核,启动过程中就输出很多很多的下列语句

in cipher
now in sys_socketcall sys_recv,result=
in cipher
now in sys_socketcall sys_recv,result=
in cipher
now in sys_socketcall sys_recv,result=
in cipher
now in sys_socketcall sys_recv,result=

启动完成后,进入到终端,使用命令#dmesg ,输出的也全部是这些语句。

我现在有很多疑问:
1. 内核启动过程中,要调用sys_socketcall()?我查过内核启动的资料,有sock_init()初始化函数,不太懂。
2. 内核启动过程中和启动后,为什么一直在调用sys_socketcall()?


...全文
180 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
翔云123456 2011-04-29
  • 打赏
  • 举报
回复

感谢两位keywie007 zaghost ,我也这么想,试试看去
zaghost 2011-04-26
  • 打赏
  • 举报
回复
恩 很可能是进程间通信的套接字
判断下family是AF_UNIX or AF_INET
玩世不恭 2011-04-26
  • 打赏
  • 举报
回复
LZ可以把sockaddr 的family打印出来看看,到底是AF_INET还是其他的
ww2000e 2011-04-25
  • 打赏
  • 举报
回复
sys_socketcall是系统调用,被多次调用正常啊
翔云123456 2011-04-25
  • 打赏
  • 举报
回复
使用ntsysv查看启动项后,nfs没有开机启动,我在想是不是keywie007说的那样,存在进程间通信,使用sys_socketcall()
ww2000e 2011-04-25
  • 打赏
  • 举报
回复
你开了一些调用socket的启动项吧,比如nfs之类的
翔云123456 2011-04-25
  • 打赏
  • 举报
回复
感谢 ww2000e ,smilestone322 ,
恩,是的,sys_socketcall()属于系统调用的,我想问的是内核启动过程中和启动后,为什么会一直在调用sys_socketcall()?

ww2000e 2011-04-25
  • 打赏
  • 举报
回复
下载《linux内核协议栈源码解析》参考参考吧 ,内核:2.6.18, 作者:luoyu
我的pdf是29页

系统调用是 调用号 和 int 0x80,产生软件中断,这时会直接跳转到内核代码中执行,sys_socketcall就是这样调用的
翔云123456 2011-04-25
  • 打赏
  • 举报
回复

多谢 keywie007的指点,非常感谢,我试试看去
玩世不恭 2011-04-25
  • 打赏
  • 举报
回复
对了,再补充一点
asmlinkage long sys_socketcall(int call, unsigned long __user *args)

说明sys_socketcall是在汇编里面调用的(因为有asmlinkage修饰,可能会用通用寄存器传参数),所有内核即使调用,也不会调用sys_socketcall,我们知道kernel 里面的汇编是很少的,并且是初始化最开始部分,并且在sock_ini之前
玩世不恭 2011-04-25
  • 打赏
  • 举报
回复
内核可能不用,但是启动时会有很多进程会跟着启动。里面可能带着有UNIX domain的进程间通信 和 网络通信(这个可能比较少)

而你这段代码是send or sendto or sendmsg的内核入口。你可以在里面程序里面判断一下sockaddr 的 family,如果是AF_UNIX就算了,只针对AF_INET做处理,这样你的dmesg可能看到的你的打印信息会少一些
翔云123456 2011-04-25
  • 打赏
  • 举报
回复
各位大侠,给点看法啊,先谢啦
smilestone322 2011-04-25
  • 打赏
  • 举报
回复
需要调用socket的
[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup辅助程序 6 读核感悟 Linux内核启动 内核解压缩 8 读核感悟 Linux内核启动 开启页面映射 9 读核感悟 Linux内核启动 链接脚本 11 读核感悟 伪装现场 系统调用参数 13 读核感悟 伪装现场 fork 系统调用 15 读核感悟 伪装现场 内核线程: 17 读核感悟 伪装现场 信号通信 19 读核感悟 kbuild系统 内核模块的编译 22 读核感悟 kbuild系统 编译到内核和编译成模块的区别 24 读核感悟 kbuild系统 make bzImage的过程 26 读核感悟 kbuild系统 make menuconfig 31 读核感悟 文件系统 用C来实现面向对象 32 读核感悟 设计模式 用C来实现虚函数表和多态 32 读核感悟 设计模式 用C来实现继承和模板 33 读核感悟 设计模式 文件系统和设备的继承和接口 34 读核感悟 设计模式 文件系统与抽象工厂 36 读核感悟 阅读源代码技巧 查找定义 37 读核感悟 阅读源代码技巧 变量命名规则 42 读核感悟 内存管理 内核中的页表映射总结 43 读核感悟 健壮的代码 exception table 内核中的刑事档案 44 读核感悟 定时器 巧妙的定时器算法 45 读核感悟 内存管理 page fault处理流程 45 读核感悟 文件读写 select实现原理 47 读核感悟 文件读写 poll的实现原理 49 1 功能介绍: 49 2 关键的结构体: 49 3 poll的实现 49 4 性能分析: 50 读核感悟 文件读写 epoll的实现原理 50 1 功能介绍 50 2 关键结构体: 51 3 epoll create的实现 53 4 epoll ctl的实现 53 5 epoll wait的实现 54 6 性能分析 54 读核感悟 同步问题 同步问题概述 55 1 同步问题的产生背景 55 2 内核态与用户态的区别 55 读核感悟 同步问题 内核态自旋锁的实现 56 1自旋锁的总述 56 2非抢占式的自旋锁 56 3 锁的释放 57 4 与用户态的自旋锁的比较 57 5 总结 58 读核感悟 内存管理 free命令详解 58 读核感悟 文件读写 2 6 9内核中的AIO 59 1 AIO概述 59 2 内核态AIO的使用 61 读核感悟 文件读写 内核态AIO相关结构体 61 1 内核态AIO操作相关信息 61 2 AIO上下文: 63 3 AIO ring 63 4 异步I O事件的返回信息 64 读核感悟 文件读写 内核态AIO创建和提交操作 65 1 AIO上下文的创建 io setup 65 2 AIO请求的提交:io submit实现机制 66 读核感悟 文件操作 AIO操作的执行 66 1 在提交时执行AIO 66 2 在工作队列中执行AIO 66 3 负责AIO执行的核心函数aio run iocb 67 4 AIO操作的完成 67 读核感悟 文件读写 内核态是否支持非direct I O方式的AIO 67 已上传7本: [14本经典Android开发教程] 1 Android开发从入门到精通 http: download csdn net detail cleopard 8355245 [14本经典Android开发教程] 2 Android开发手册 API函数详解 http: download csdn net detail cleopard 8374487 [14本经典Android开发教程] 3 Android SDK 中文开发文档 http: download csdn net detail cleopard 8380429 [14本经典Android开发教程] 4 Android应用程序开发36技 http: download csdn net detail cleopard 8380495 [14本经典Android开发教程] 5 linux Android基础知识总结 http: download csdn net detail cleopard 8380529 [14本经典Android开发教程] 6 Android驱动开发入门及手机案例开发分析教程 http: download csdn net detail cleopard 8388019 [14本经典Android开发教程] 7 Android编程入门教程 http: download csdn net detail cleopard 8388043 剩余8本稍后上传 @或直接从这里寻找@ http: download csdn net user cleopard album @更多@ http: cleopard download csdn net 福利 http: xuemeilaile com 17份软件测试文档 http: download csdn net album detail 1425 13份WPF经典开发教程 http: download csdn net album detail 1115 C#资料合辑二[C#桌面编程入门篇] http: download csdn net album detail 957 C#资料合辑一[C#入门篇] http: download csdn net album detail 669 [Csharp高级编程 第6版 ] 共8压缩卷 http: download csdn net album detail 667 10个[精品资源]Java学习资料合辑[一] http: download csdn net album detail 663 10个C#Socket编程代码示例 http: download csdn net album detail 631 6份GDI+程序设计资源整合[全零分] http: download csdn net album detail 625 2014年移动游戏行业数据分析 http: download csdn net detail cleopard 8340331 一文读懂2014年全球互联网广告新生态 http: download csdn net detail cleopard 8340303">[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核 [更多]

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧