»ñÈ¡Linux 2.6.x sys_call_table
ÔÚlinuxÖÐËùÓеÄsyscall¶¼Êǵ÷ÓÃint 0x80, int 0x80µÄÖжϷþÎñ³ÌÐòΪsystem_call(arch/x86/kernel/traps_32.c:set_system_gate(SYSCALL_VECTOR,&system_call). system_call (arch/x86/entry_32.S)×îÖÕcall *sys_call_table(,%eax,4)À´Íê³ÉÒ»¸ösyscallµ÷ÓÃ.
¼´ int 0x80 -> system_call -> sys_call_table, ÕâÑùÎÒÃÇÖ»ÒªÊ×ÏÈ»ñÈ¡int 0x80µÄÖжϷþÎñµØÖ·system_callµØÖ·, È»ºóÔÚsystem_call´úÂëÖÐÖ±½ÓËÑË÷callÖ¸Áî¼´¿ÉÕÒµ½sys_call_tableµØÖ·ÁË!
ÁíÒ»ÖÖ·½·¨¾ÍÊÇÖ±½ÓÐÞ¸Ä
ͨ¹ýcat /boot/System.map-`uname -r` |grep sys_call_table ²é¿´µ±Ç°sys_call_tableµØÖ·,²¢Óëͨ¹ýÒÔÉÏ·½·¨È¡µÃµÄµØÖ·×ö±È½Ï!
Äں˰汾: ubuntu 2.6.24-19-server
/*
* Standard in kernel modules
*/
#include <linux/kernel.h> /* We're doing kernel work */
#include <linux/module.h> /* Specifically, a module, */
#include <linux/moduleparam.h> /* which will have params */
#include <linux/unistd.h> /* The list of system calls */
/*
* For the current (process) structure, we need
* this to know who the current user is.
*/
#include <linux/sched.h>
#include <asm/uaccess.h>
unsigned long *sys_call_table = 0;
//EXPORT_SYMBOL ( sys_call_table );
struct {
unsigned short limit;
unsigned int base;
} __attribute__ ( ( packed ) ) idtr;
struct {
unsigned short offset_low;
unsigned short segment_select;
unsigned char reserved, flags;
unsigned short offset_high;
} __attribute__ ( ( packed ) ) * idt;
unsigned long* find_sys_call_table(void)
{
unsigned long system_call = 0; // x80Öжϴ¦Àí³ÌÐòsystem_call µØÖ·
char *call_hex = "\xff\x14\x85"; // call Ö¸Áî
char *code_ptr = NULL;
 
Ïà¹ØÎĵµ£º
Ò»£ºÇ°ÑÔ
×î½üÔÚÑо¿androidµÄsensor driver£¬Ö÷ÒªÊÇE-compass£¬ÆäÖÐÓõ½ÁËLinux input×Óϵͳ.ÔÚÍøÉÏÒ²¿´Á˺ܶàÕâ·½ÃæµÄ×ÊÁÏ£¬¸Ð¾õ»¹ÊÇÕâÆª·ÖÎöµÄ±È½ÏϸÖÂ͸³¹£¬Òò´Ë×ªÔØÒ»ÏÂÒÔ±ã×Ô¼ºÑ§Ï°£¬Í¬Ê±ºÍ´ó¼Ò·ÖÏí£¡
£¨ÕâÆª²©¿ÍÖ÷ÒªÊÇÒÔ¼üÅÌÇý¶¯ÎªÀýµÄ£¬²»¹ý½²½âµÄÊÇLinux Input Subsystem£¬¿ÉÒÔ×ÐϸµÄÑо¿Ò»Ï£¡£©
¼üÅÌÇý¶¯½«¼ì ......
Ò»¡¢GCC (×î×î³£¼û:gcc hello.c –o hello) ¢Ù³£ÓÃÑ¡Ïî -c:½ö¶ÔÔ´Îļþ½øÐбàÒë
-o:¶ÔÉú³ÉµÄ´úÂë½øÐÐÓÅ»¯£¬ÓÐ0£¬1£¬2£¬3ËĸöµÈ¼¶£¬Ä¬ÈÏΪ2
-g:¼ÓÈëµ÷ÊÔÐÅÏ¢
-I dir:±àÒëÔ´ÎļþÊÇÔö¼ÓÒ»¸öËÑË÷¿âÎļþµÄĿ¼
-w:½ûÖ¹ËùÓо¯¸æ
-W warning:ÔÊÐí ......
°æÈ¨ÉùÃ÷
±¾ÎÄ×÷ÕßÊÇһλ×ÔÓÉÈí¼þ°®ºÃÕߣ¬ËùÒÔ±¾ÎÄËäÈ»²»ÊÇÈí¼þ£¬µ«ÊDZ¾×Å GPL µÄ¾«Éñ·¢²¼¡£ÈκÎÈ˶¼¿ÉÒÔ×ÔÓÉʹÓá¢×ªÔØ¡¢¸´ÖƺÍÔÙ·Ö·¢£¬µ«±ØÐë±£Áô×÷ÕßÊðÃû£¬Ò಻µÃ¶ÔÉùÃ÷ÖеÄÈκÎÌõ¿î×÷ÈκÎÐÎʽµÄÐ޸ģ¬Ò²²»µÃ¸½¼ÓÈÎºÎÆäËüÌõ¼þ¡£Äú¿ÉÒÔ×ÔÓÉÁ´½Ó¡¢ÏÂÔØ¡¢´«²¥´ËÎĵµ£¬µ«Ç°ÌáÊDZØÐ뱣֤ȫÎÄÍêÕû×ªÔØ£¬°üÀ¨ÍêÕûµÄ°æÈ¨ÐÅÏ¢ºÍ× ......
ÒÔÇ°Ôø¾¿´¹ýÕâÑùµÄһƪÎÄÕ£¬´ó¸ÅÊÇÕâÑùµÄ:
ѧϰLinuxÒª·ÖÈý¸ö½×¶ÎÀ´Ñ§£º
1£©Ê¹ÓÃLinux£»
2)LinuxµÄ³ÌÐòÉè¼Æ£»
3£©LinuxµÄÄں˼°±à³Ì¡£
´ÓÏÖÔÚ¿ªÊ¼ÒªÑ§Ï°LinuxÁË£¬Ö÷ÒªÊÇÏÈ´ÓʹÓÃLinux¿ªÊ¼ÁË£¬Ñ¡ÓõÄLinuxÊÇRed Hat 5. ......
1£ºlinuxÏÂÅúÁ¿½«´óдĿ¼»òÎļþÃû¸ÄΪСдÃüÁî
ZIP ÏÈ´ò³É°ü£¬ZIP -r A A/*£¬ÔÙUNZIP -LL A B (A/*±íʾAĿ¼ÏµÄËùÓÐÎļþ)£¨AºÍB¶¼Îª.zipÎļþ,-LL ±ä´óдΪСдµÄ²ÎÊý£©
Ôò£¬A°üÀïµÄ´óдĿ¼ºÍÎļþ ......