当前位置: 技术问答>linux和unix
我在linux下劫持了系统调用write ,然后在hached_write函数里面如何获得PID呢?
来源: 互联网 发布时间:2017-05-19
本文导语: 我在linux下劫持了系统调用write ,然后在hacked_write函数里面如何获得PID呢? hached_write应该是运行在进程的上下文中,该如何调用函数获得进程的PID? 劫持的方法是编写内核模块,获得sys_call_table , 然后保存orig_write = ...
我在linux下劫持了系统调用write ,然后在hacked_write函数里面如何获得PID呢?
hached_write应该是运行在进程的上下文中,该如何调用函数获得进程的PID?
劫持的方法是编写内核模块,获得sys_call_table ,
然后保存orig_write = sys_call_table[__NR_write];
sys_call_table[__NR_write] = hacked_write
这样劫持的。
#include
然后调用sys_getpid()
但是insmod时出现hookwrite: Unknown symbol sys_getpid
当然我使用
long (*orig_getpid)(void);
orig_getpid = sys_call_table[__NR_getpid];
然后在hacked_write里使用orig_getpid()就能得到pid ,, 这个是可以成功,我已经试验了。
请问还有没有更优雅些的方法获得pid呢?
hached_write应该是运行在进程的上下文中,该如何调用函数获得进程的PID?
劫持的方法是编写内核模块,获得sys_call_table ,
然后保存orig_write = sys_call_table[__NR_write];
sys_call_table[__NR_write] = hacked_write
这样劫持的。
#include
然后调用sys_getpid()
但是insmod时出现hookwrite: Unknown symbol sys_getpid
当然我使用
long (*orig_getpid)(void);
orig_getpid = sys_call_table[__NR_getpid];
然后在hacked_write里使用orig_getpid()就能得到pid ,, 这个是可以成功,我已经试验了。
请问还有没有更优雅些的方法获得pid呢?
|
就算是2.6的内核 ,2.6.12 和2.6.39 的task_struct 变化相当大
你没有办法写一个通用的c代码,从current的task_struct里直接取出pid
所以为了通用,你还是掉被劫持内核的api
Unknown symbol 是因为sys_getpid不是一个导出符号,不能随意在内核其他模块调用。你不是已经能从sys_call_table里掉系统原有的sys_getpid吗,这样的方法才是能通用2.6的
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。