मैं अपने खुद के कार्यान्वयन के साथ एक मानक प्रणाली कॉल (जैसे SYS_mkdir) की जगह की जरूरत है।सिस्टम कॉल लिनक्स कर्नेल मॉड्यूल में अवरोधन (कर्नेल 3.5)
जैसा कि मैंने कुछ स्रोतों में पढ़ते हैं, this question Stackoverflow पर सहित, sys_call_table
कर्नेल संस्करण 2.6
के बाद से प्रतीक निर्यात नहीं कर रहा है।
मैं निम्नलिखित कोड की कोशिश की:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/unistd.h>
#include <asm/syscall.h>
int (*orig_mkdir)(const char *path);
....
int init_module(void)
{
orig_mkdir=sys_call_table[__NR_mkdir];
sys_call_table[__NR_mkdir]=own_mkdir;
printk("sys_mkdir replaced\n");
return(0);
}
....
दुर्भाग्य से मैं संकलक त्रुटि प्राप्त:
error: assignment of read-only location ‘sys_call_table[83]’
मैं कैसे सिस्टम कॉल जगह ले सकता है?
संपादित करें: क्या कर्नेल पैचिंग के बिना कोई समाधान है?
को 'चार *' प्रकार कलाकारों के साथ की कोशिश तो –
आवंटित किया जा सकता है [इस] (http://www.linuxforums.org/forum/kernel/133982-cannot-modify-sys_call_table.html) और [ यह] (http://stackoverflow.com/questions/2103315/linux- कर्नेल- सिस्टम-call-hooking-example) आपके लिए उपयोगी है –
कोई सार्वभौमिक समाधान w/o पैचिंग नहीं है। –