kernelѧϰ֮ϵͳµ÷Óùý³Ì·ÖÎö
|
¹ý³Ì·ÖÎö£º 1¡¢ÏµÍ³µ÷ÓÃÐèÒªÒ»¸öÓû§¿Õ¼äµ½Äں˿ռäµÄת»»£¬²»Í¬µÄƽ̨Óв»Í¬µÄÖ¸ÁîÀ´Íê³ÉÕâÑùµÄת»»£¬Õâ¸öÖ¸ÁîÒ²½Ð×ö²Ù×÷ϵͳÏÝÈë(operating systemtrap)Ö¸Áî¡£ÔÚlinuxÖжÔÓÚx86À´ËµÊÇÓÃÈíÖжÏ0x80£¬Ò²¼´ÊÇint $0x80¡£ÈíÖжÏÓÉÈí¼þÖ¸Áî´¥·¢£¬Ó²ÖжÏÓÉÓ²¼þ´¥·¢¡£ ͨ¹ýÈíÖжϣ¬ÏµÍ³»áÌøµ½Ò»¸öÔ¤¶¨µÄÄں˿ռ䡣ËüÖ¸ÏòÁËϵͳµ÷Óô¦Àí³ÌÐò(²»ÊÇϵͳµ÷Ó÷þÎñ³ÌÐò)system_callº¯Êý(arch/x86/kernel/entry32.h)¡£ÈçÉÏͼ¡£ 2¡¢system_callµ½·þÎñ³ÌÐò ÏÔÈ»ËùÓеÄϵͳµ÷Óö¼»áÌøµ½Õâ¸öµØÖ·Ö´ÐÐsystem_callº¯Êý¡£ÔÚÖ´ÐÐint 0x80ʱϵͳµ÷ÓúŻᱻ·ÅÈëeax¼Ä´æÆ÷ÖС£ÒòΪsys_call_tableÿ¸öÏîÕ¼ÓÃ4¸ö×Ö½Ú¡£ËùÒÔsys_call_table×÷Ϊ»ùµØÖ·£¬eax*4×÷ÎªÆ«ÒÆÁ¿¾Í¿ÉÒÔÕÒµ½¶ÔÓ¦µÄ·þÎñ³ÌÐòµÄµØÖ·¡£ ϵͳµ÷ÓõIJÎÊýͨ¹ýÆäËû¼Ä´æÆ÷À´´«µÝ¡£Èç write(unsignedint fd,const char *buf,size_t count) ¼Ä´æÆ÷ebx,ecx,esi,edxÀ´´«µÝ¡£µ«ÊÇÇ°ÃæÎÒÃÇ˵¹ý£¬asmlinkage±íʾÄں˴ӶÑÕ»ÖÐÌáÈ¡²ÎÊý£¬¶ø²»ÊǼĴæÆ÷¡£ÒòΪÔÚsystem_callÖ´ÐÐʱÊ×ÏȰÑÕâЩ¼Ä´æÆ÷ѹÈë¶ÑÕ»ÁË¡£´ÓÏÂÃæµÄ´úÂëÖоͿÉÕÒµ½´ð°¸~~~
ENTRY(system_call)
RING0_INT_FRAME # can't unwind into user spaceanyway
pushl_cfi%eax # save orig_eax
SAVE_ALL
GET_THREAD_INFO(%ebp)
#system call tracing in operation / emulation
testl$_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
jnzsyscall_trace_entry
cmpl$(nr_syscalls), %eax
jaesyscall_badsys
syscall_call:
call*sys_call_table(,%eax,4)
ϵͳ·þÎñ³ÌÐò´Ó¶ÑÕ»ÖлñÈ¡²ÎÊý£¬²¢Ð޸ģ¬×îºóÔÙͨ¹ý¶ÑÕ»·µ»ØÐ޸ĺóµÄÊýÖµ¡£ ²»ÊÇËùÓеÄϵͳµ÷Óö¼ÓÐʵ¼ÊÄÚÈÝ£¬Èçsys_ni_syscllÔÚkernel/sys_ni.cÖж¨Ò壺
asmlinkage long sys_ni_syscall(void){
return -ENOSYS;
}
Äã»á·¢ÏÖÔÚsys_call_tableÖÐsys_ni_syscallÕ¼¾ÝÁ˺ܶàÄÚÈÝ£¬ÆäʵËü´ú±í×ÅÒѱ»ÌÔ̵Äϵͳµ÷Óá£
.longsys_ni_syscall /* old stty syscallholder */
.longsys_ni_syscall /* old gtty syscallholder */
.longsys_access
.longsys_nice
.longsys_ni_syscall /* 35 - old ftime syscallholder */
.longsys_sync
.longsys_kill
.longsys_rename
.longsys_mkdir
.longsys_rmdir /* 40 */
.longsys_dup
.longsys_pipe
.longsys_times
.longsys_ni_syscall /* old prof syscallholder */
ÈçÉÏÃæ¿ÉÖªsys_ni_syscall´úÌæÁ˲»ÓõÄsttyºÍgttyºÍprof¡£ÆäʵֻҪÊDZ»ÄÚºËÌÔ̵Äϵͳµ÷Óö¼»á±»sys_ni_systcall´úÌæ¡£Ö®ËùÒÔÕâÑùÊÇΪÁËÀϵijÌÐòÔÚеÄÄÚºËÉÏÔËÐÐʱ²»ÖÁÓÚ³öÏÖ´óµÄÎÊÌâ¡£Èç²»Ó¦µ÷ÓÃÕâ¸öϵͳµ÷ÓÃÈ´µ÷ÓÃÁËÄǸöϵͳµ÷ÓÃÁË¡£ ²é¿´±¾À¸Ä¿¸ü¶à¾«²ÊÄÚÈÝ£ºhttp://www.bianceng.cn/OS/unix/ £¨±à¼£ºÔƼÆËãÍø_ËÞǨվ³¤Íø£© ¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ! |
- QQÔÚÏ߿ͷþ´úÂ룬×ó²à¸¡¶¯Òþ²Ø£¬»¹Óа¢ÀïÍúÍú
- kernelѧϰ֮µ÷¶ÈÆ÷·¢Õ¹Ê·
- UNIXÍøÂç±à³Ì£ºÌ×½Ó×ÖÑ¡Ïsetsockopt£©
- ºì»ðÖйúÄ꣡2019²»µÃ²»¿´µÄRTXÓÎÏ·±¾ÍƼö
- ios9.2ʲôʱºò¸üРios9.2Õýʽ°æ·¢²¼Ê±¼ä
- ×÷Òµ°ïÔõô¼ÓºÃÓÑ ×÷Òµ°ïÔõô׬Ǯ
- UNIX»·¾³¸ß¼¶±à³Ì£ºÍøÂç±à³Ì³£Óú¯Êý¼°½á¹¹
- ÅÉÅÉ͵ºì°üÔõÃ´Íæ ÅÉÅÉ͵ºì°ü°²È«Âð
- kernelѧϰ֮·ÖÎösys_reboot
- ѰÁú¾÷ÓÎÏ·ºÃÍæÂð ѰÁú¾÷¹Ù·½appÔõôÑù
- UNIX»·¾³¸ß¼¶±à³Ì£ºÏß³Ì˽ÓÐÊý¾Ý
- LG gramÇᱡ±Ê¼Ç±¾£¬¿ªÆôÎÒµÄÀíÏëÈËÉú
- ÃûƬС³ÌÐòµÄ³öÏÖ
- »ðÓ°ÈÌÕßÊÖÓÎiOSʲôʱºò¹«²â
- js´òÓ¡Ö½º¯Êý´úÂ루µÝ¹é£©
- iPhone ÎóɾÊÓÆµ¡¢ÒôÀÖµÈÎļþÔõô»Ö¸´
- UnixϵͳÏÂFindÃüÁîµÄÓ¦ÓÃ
- ÈçºÎÆÁ±Îimessage¹ã¸æ£¿iPhone¾ÜÊÕÀ¬»øÐÅÏ¢¼¼ÇÉ
- º½º£ÍõÇ¿Õß֮·ʮÁ¬³é¹¥ÂÔ_º½º£ÍõÇ¿Õß֮·ʮÁ¬³é
- ÐÂÆ·ÓÐºÃ¼Û °ïÄãѡһЩÏÖÔÚÄÜÈëÊֵıʼDZ¾


