HTML5¼¼Êõ

ÆÊÎöLinuxϵͳµ÷ÓõÄÖ´Ðз¾¶ - ¡îRonnyؼ(2)

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£ºH5Ö®¼Ò 2017-11-06 12:01 ÎÒÒªÆÀÂÛ( )

#define _set_gate(gate_addr,type,dpl,addr) \__asm__ ( movw %%dx,%%ax\n\t \ movw %0,%%dx\n\t \ movl %%eax,%1\n\t \ movl %%edx,%2 \: \: i ((short) ( 0x8000 +(dpl 13 )+(type 8 ))), \ o (*((char *) (gate

#define _set_gate(gate_addr,type,dpl,addr) \ __asm__ ("movw %%dx,%%ax\n\t" \ "movw %0,%%dx\n\t" \ "movl %%eax,%1\n\t" \ "movl %%edx,%2" \ : \ : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \ "o" (*((char *) (gate_addr))), \ "o" (*(4+(char *) (gate_addr))), \ "d" ((char *) (addr)),"a" (0x00080000)) #define set_system_gate(n,addr) \ _set_gate(&idt[n],15,3,addr)

ͨ¹ýÉÏÃæµÄ´úÂ룬ÎÒÃÇ¿ÉÒÔ¿´³ö£¬set_system_gate°ÑµÚ0x80ÖжϱíµÄ±íÏîÖÐÖжϴ¦Àí³ÌÐòÈë¿ÚµØÖ·ÉèÖÃΪ&system_call¡£²¢ÇÒ°ÑÄÇÒ»ÏîIDT±íÖеÄDPLÉèÖÃÁËΪ3, ·½±ãÓû§³ÌÐò¿ÉÒÔÈ¥·ÃÎÊÕâ¸öµØÖ·¡£

ËùÒÔinit 0x80×îÖջᱻsystem_callÕâ¸öº¯ÊýµØÖ·´¦µÄ´úÂëÀ´Êµ¼Ê´¦Àí¡£ÈÃÎÒÃÇ¿´ÏÂsystem_call×öÁËʲôÊÂÇé¡£

# linux/kernel/system_call.s nr_system_calls=72 # ×î´óµÄϵͳµ÷ÓøöÊý .globl _system_call system_call: cmpl $nr_system_calls-1,%eax # eaxÖзŵÄϵͳµ÷Óúţ¬ÔÚwriteµÄµ÷Óùý³ÌÖÐΪ__NR_write = 4 ja bad_sys_call push %ds # ÏÂÃæÊÇһЩ¼Ä´æÆ÷±£»¤£¬ºóÃ滹Ҫµ¯³ö push %es push %fs pushl %edx pushl %ecx # push %ebx,%ecx,%edx as parameters pushl %ebx # to the system call movl $0x10,%edx # set up ds,es to kernel space mov %dx,%ds #¡¡°ÑdsµÄ¶Î±êºÅÉèÖÃΪ0001 0000(×îºó£²Î»ÊÇÌØȨ¼¶)£¬ËùÒԶκÅΪ4£¬ÄÚºË̬Êý¾Ý¶Î mov %dx,%es movl (×îºó£²Î»ÊÇÌØȨ¼¶)£¬ËùÒԶκÅΪ5£¬Óû§Ì¬Êý¾Ý¶Î mov %dx,%fs call sys_call_table(,%eax,4) # ʵ¼ÊµÄϵͳµ÷Óà pushl %eax movl current,%eax cmpl $0,state(%eax) # state ¼ì²âÊÇ·ñΪ¾ÍÐ÷״̬ jne reschedule # ½øÈëµ÷¶È³ÌÐò cmpl $0,counter(%eax) # counter ²é¿´ÐźÅ״̬ je reschedule ret_from_sys_call: movl current,%eax # task[0] cannot have signals cmpl task,%eax je 3f cmpw $0x0f,CS(%esp) # was old code segment supervisor ? jne 3f cmpw = 0x17 ? jne 3f movl signal(%eax),%ebx movl blocked(%eax),%ecx notl %ecx andl %ebx,%ecx bsfl %ecx,%ecx je 3f btrl %ecx,%ebx movl %ebx,signal(%eax) incl %ecx pushl %ecx call do_signal popl %eax 3: popl %eax popl %ebx popl %ecx popl %%

ÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬ÉÏÃæ´úÂëÖд󲿷ִúÂëÊǼĴæÆ÷״̬±£´æÓë»Ö¸´£¬¶ÑÕ»¶ÎµÄÇл»¡£ºËÐÄ´úÂëΪcall sys_call_table(,%eax,4)£¬ËüÊÇÒ»¸öº¯Êýµ÷Ó㬺¯ÊýµÄµØַΪsys_call_table(,%eax,4) = sys_call_table + 4*%eax˵Ã÷sys_call_tableΪһ¸öÊý×éÈë¿Ú£¬Êý×éÖеÄÔªËس¤¶È¶¼Îª4¸ö×Ö½Ú£¬ÎÒÃÇÒª·ÃÎÊÊý×éÖеĵÚ%eax¸öÔªËØ¡£¶ø%eax¼´ÎªÏµÍ³µ÷Óúš£sys_call_table¾ÍÊÇËùÓÐϵͳµ÷Óõĺ¯ÊýÖ¸ÕëÊý×é¡£

// ¶¨ÒåÔÚ linux/include/linux/sys.h fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link, sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod, sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount, sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm, sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access, sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir, sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid, sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys, sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit, sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid, sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask, sys_setreuid,sys_setregid };

µ½ÕâÀÎÒÃÇÕÒµ½ÁË×îÖÕÕæÕýµÄÖ´ÐкËÐĺ¯ÊýµØÖ·sys_write£¬Õâ¸öÊDzÙ×÷ʵÏÖµÄÄں˴úÂ룬ËùÓеÄÆÁÄ»´òÓ¡¾ÍÊÇÓɸú¯Êý×îÖÕʵÏÖ¡£ËüÀïÃæÉæ¼°IOµÄһЩӲ¼þÇý¶¯º¯Êý£¬ÎÒÃÇÔÚÕâÀï¾Í²»ÔÙ¼ÌÐøÉîÈëÁË¡£

µ½´Ë£¬ÎÒÃÇÒѾ­Í¨¹ýprintfÕâÑùÒ»¸öÉϲãµÄº¯Êý½Ó¿Ú£¬Çå³þ²Ù×÷ϵͳÊÇÈçºÎÒ»²½²½ÎªÁËÎÒÃÇÌṩÁËÒ»¸öÄں˵÷Óõķ½·¨¡£Èç´ËµÄ¾«Ï¸¿ØÖÆ£¬ÈÃÈ˸Ð̾¡£

4. ÎÒÃÇÈçºÎΪ²Ù×÷ϵͳÌí¼ÓÒ»¸öϵͳµ÷ÓÃ

ÏÂÃæ¼òµ¥ËµÃ÷һϣ¬ÈçºÎÔÚ²Ù×÷ϵͳԴÂëÖÐÌí¼ÓÁ½¸öÎÒÃÇ×Ô¼ºµÄϵͳµ÷ÓÃwhoamiºÍiam

  • iamϵͳµ÷ÓðÑÎÒÃÇÖ¸¶¨µÄÒ»¸ö×Ö·û´®±£´æÔÚÄÚºËÖС£
  • whoami°ÑÄÚºËÖеÄͨ¹ýiamÉèÖõÄÄǸö×Ö·û´®¶ÁÈ¡³öÀ´¡£
  • ÏÂÃæÊǾßÌåµÄ²Ù×÷²½Öè¡£

    ¡¡

    1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎתÔصĸå¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬ÇëתÔØʱÎñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

    Ïà¹ØÎÄÕÂ
    • Ò»¸ö¸ßÐÔÄÜ¡¢ÇáÁ¿¼¶µÄ·Ö²¼Ê½ÄÚ´æ¶ÓÁÐϵͳ--beanstalk - ¾²¶ù1986

      Ò»¸ö¸ßÐÔÄÜ¡¢ÇáÁ¿¼¶µÄ·Ö²¼Ê½ÄÚ´æ¶ÓÁÐϵͳ--beanstalk - ¾²¶ù1986

      2017-10-12 11:01

    • MMORPGÕ½¶·ÏµÍ³Ëæ±Ê£¨Èý£©¡¢AIϵͳ¼ò½é - zblade

      MMORPGÕ½¶·ÏµÍ³Ëæ±Ê£¨Èý£©¡¢AIϵͳ¼ò½é - zblade

      2017-10-12 10:06

    • ·Ö²¼Ê½ÏµÍ³ÖÐÉú³ÉÈ«¾ÖIDµÄ×ܽáÓë˼¿¼ - xybaby

      ·Ö²¼Ê½ÏµÍ³ÖÐÉú³ÉÈ«¾ÖIDµÄ×ܽáÓë˼¿¼ - xybaby

      2017-10-06 08:01

    • ÉîÈëÀí½â¼ÆËã»úϵͳ£¨ÐòÕ£©------̸³ÌÐòԱΪʲôҪ¶®µ×²ã¼ÆËã»ú½á¹¹ - YSOcean

      ÉîÈëÀí½â¼ÆËã»úϵͳ£¨ÐòÕ£©------̸³ÌÐòԱΪʲôҪ¶®µ×²ã¼ÆËã»ú½á¹¹

      2017-09-09 09:07

    ÍøÓѵãÆÀ
    ¹