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/ £¨±à¼£º·ðɽվ³¤Íø£© ¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ! |
- ÎÈ׬1ºÅÔõôÂò?Íò´ïÎÈ׬һºÅÔõô¹ºÂò?
- 2016Æ»¹û´º¼¾·¢²¼»á»Ø¹Ë iPhone SE·¢²¼»á×ܽá
- ´ÅÅÌÍêÕû¾µÏñµÄÄ¿µÄ
- Æ»¹û·¢²¼ÐÂÅä¼þ Æ»¹ûÐÂÅä¼þ»ã×Ü
- Apple watchÌåÑé²âÆÀ Apple Watch²»ÎªÈËÖªµÄ11¸öÌØµã
- ÎÊѧappÊÇʲô ÎÊѧappÈí¼þÆÀ²â
- Golang»¹ÊÇPython£¿ÄÄÖÖÓïÑÔ¸üÊʺÏAI£¿
- iOS8.3ÎÊÌâ iOS8.3Bug»ã×Ü
- UNIX»·¾³¸ß¼¶±à³Ì£ºsystem VÐźÅÁ¿
- jsµ÷ÓÃFlexÖеķ½·¨²¢ÏòflexÖд«²Î¼°flexµ÷ÓÃjsʾÀý
- »¨·Û¶ùÈçºÎµÇ¼ »¨·Û¶ùµÇ¼µÄͼÎĽ̳Ì
- ios8Ôõô²éѯºÍÏÂÔØ¸½½üÈÈÃÅAPP
- iphoneÈçºÎµ¼ÈëÊÖ»ú¿¨Í¨Ñ¶Â¼ Æ»¹ûÊÖ»úÈçºÎµ¼Èësi
- flex×Ô¶¨Ò尴ťƤ·ôʾÀý¸½Í¼
- ¸ø iPhone 6/6Plus ¼ÓÒ»¸ö¡°·µ»Ø¼ü¡±
- dd for windowsÏÂÔØ¼°¼òÊö
- iOS9¹«²â°æÊ²Ã´Ê±ºò·¢²¼ iOS9¹«²â°æÉêÇë½Ì³Ì
- °¢ÀïÂÃÐлúƱÔõôѡ×ù °¢ÀïÂÃÐлúƱѡ×ù·½·¨
- ΢»Æ½ðÔõô·¢ºì°ü ΢»Æ½ðºì°üÔõôʹÓÃ
- ¶¶Òô°®ÐÄÆ´Í¼½Ì³Ì ¶¶Òô°®ÐÄÆ´Í¼Ôõô×ö