ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÈçºÎÔÚLinuxϵͳÖÐÌí¼ÓеÄϵͳµ÷ÓÃ

·¢²¼Ê±¼ä:2006-11-07 09:55:46À´Ô´:ºìÁª×÷Õß:lgms2008
¡¡¡¡ÏµÍ³µ÷ÓÃÊÇÓ¦ÓóÌÐòºÍ²Ù×÷ϵͳÄÚºËÖ®¼äµÄ¹¦Äܽӿڡ£ÆäÖ÷ҪĿµÄÊÇʹµÃÓû§¿ÉÒÔʹÓòÙ×÷ϵͳÌṩµÄÓйØÉ豸¹ÜÀí¡¢ÊäÈë/ÊäÈëϵͳ¡¢ÎļþϵͳºÍ½ø³Ì¿ØÖÆ¡¢Í¨ÐÅÒÔ¼°´æ´¢¹ÜÀíµÈ·½ÃæµÄ¹¦ÄÜ£¬¶ø²»±ØÁ˽âϵͳ³ÌÐòµÄÄÚ²¿½á¹¹ºÍÓйØÓ²¼þϸ½Ú£¬´Ó¶øÆðµ½¼õÇáÓû§¸ºµ£ºÍ±£»¤ÏµÍ³ÒÔ¼°Ìá¸ß×ÊÔ´ÀûÓÃÂʵÄ×÷Óá£

¡¡¡¡Linux²Ù×÷ϵͳ×÷Ϊ×ÔÓÉÈí¼þµÄ´ú±í£¬ËüÓÅÁ¼µÄÐÔÄÜʹµÃËüµÄÓ¦ÓÃÈÕÒæ¹ã·º£¬²»½öµÃµ½×¨ÒµÈËÊ¿µÄ¿Ï¶¨£¬¶øÇÒÉÌÒµ»¯µÄÓ¦ÓÃÒ²ÊÇÈç»ðÈçݱ¡£ÔÚLinuxÖУ¬´ó²¿·ÖµÄϵͳµ÷Óðüº¬ÔÚLinuxµÄlibc¿âÖУ¬Í¨¹ý±ê×¼µÄCº¯Êýµ÷Ó÷½·¨¿ÉÒÔµ÷ÓÃÕâЩϵͳµ÷Óá£ÄÇô£¬¶ÔLinuxµÄ·¢ÉÕÓÑÀ´Ëµ£¬ÈçºÎÔÚLinuxÖÐÔö¼ÓеÄϵͳµ÷ÓÃÄØ£¿

¡¡¡¡1 Linuxϵͳµ÷ÓûúÖÆ

¡¡¡¡ÔÚLinuxϵͳÖУ¬ÏµÍ³µ÷ÓÃÊÇ×÷ΪһÖÖÒì³£ÀàÐÍʵÏֵġ£Ëü½«Ö´ÐÐÏàÓ¦µÄ»úÆ÷´úÂëÖ¸ÁîÀ´²úÉúÒì³£Ðźš£²úÉúÖжϻòÒì³£µÄÖØÒªÐ§¹ûÊÇϵͳ×Ô¶¯½«Óû§Ì¬Çл»ÎªºËÐÄ̬À´¶ÔËü½øÐд¦Àí¡£Õâ¾ÍÊÇ˵£¬Ö´ÐÐϵͳµ÷ÓÃÒì³£Ö¸Áîʱ£¬×Ô¶¯µØ½«ÏµÍ³Çл»ÎªºËÐÄ̬£¬²¢°²ÅÅÒì³£´¦Àí³ÌÐòµÄÖ´ÐС£LinuxÓÃÀ´ÊµÏÖϵͳµ÷ÓÃÒì³£µÄʵ¼ÊÖ¸ÁîÊÇ£º

ÒýÓÃ:
¡¡¡¡Int $0x80


¡¡¡¡ÕâÒ»Ö¸ÁîʹÓÃÖжÏ/Òì³£ÏòÁ¿ºÅ128£¨¼´16½øÖƵÄ80£©½«¿ØÖÆÈ¨×ªÒƸøÄںˡ£Îª´ïµ½ÔÚʹÓÃϵͳµ÷ÓÃʱ²»±ØÓûúÆ÷Ö¸Áî±à³Ì£¬ÔÚ±ê×¼µÄCÓïÑÔ¿âÖÐΪÿһϵͳµ÷ÓÃÌṩÁËÒ»¶Î¶ÌµÄ×Ó³ÌÐò£¬Íê³É»úÆ÷´úÂëµÄ±à³Ì¹¤×÷¡£ÊÂʵÉÏ£¬»úÆ÷´úÂë¶Î·Ç³£¼ò¶Ì¡£ËüËùÒª×öµÄ¹¤×÷Ö»Êǽ«Ë͸øÏµÍ³µ÷ÓõIJÎÊý¼ÓÔØµ½CPU¼Ä´æÆ÷ÖУ¬½Ó×ÅÖ´ÐÐint $0x80Ö¸ÁȻºóÔËÐÐϵͳµ÷Óã¬ÏµÍ³µ÷Óõķµ»ØÖµ½«ËÍÈëCPUµÄÒ»¸ö¼Ä´æÆ÷ÖУ¬±ê×¼µÄ¿â×Ó³ÌÐòÈ¡µÃÕâÒ»·µ»ØÖµ£¬²¢½«ËüËÍ»ØÓû§³ÌÐò¡£

¡¡¡¡ÎªÊ¹ÏµÍ³µ÷ÓõÄÖ´ÐгÉΪһÏî¼òµ¥µÄÈÎÎñ£¬LinuxÌṩÁËÒ»×éÔ¤´¦ÀíºêÖ¸Áî¡£ËüÃÇ¿ÉÒÔÓÃÔÚ³ÌÐòÖС£ÕâЩºêÖ¸Áîȡһ¶¨µÄ²ÎÊý£¬È»ºóÀ©Õ¹Îªµ÷ÓÃÖ¸¶¨µÄϵͳµ÷Óõĺ¯Êý¡£

¡¡¡¡ÕâЩºêÖ¸Áî¾ßÓÐÀàËÆÏÂÃæµÄÃû³Æ¸ñʽ£º

ÒýÓÃ:
¡¡¡¡_syscallN£¨parameters£©


¡¡¡¡ÆäÖÐNÊÇϵͳµ÷ÓÃËùÐèµÄ²ÎÊýÊýÄ¿£¬¶øparametersÔòÓÃÒ»×é²ÎÊý´úÌæ¡£ÕâЩ²ÎÊýʹºêÖ¸ÁîÍê³ÉÊʺÏÓÚÌØ¶¨µÄϵͳµ÷ÓõÄÀ©Õ¹¡£ÀýÈ磬ΪÁ˽¨Á¢µ÷ÓÃsetuid£¨£©ÏµÍ³µ÷Óõĺ¯Êý£¬Ó¦¸ÃʹÓãº

ÒýÓÃ:
¡¡¡¡_syscall1£¨ int£¬ setuid£¬ uid_t£¬ uid £©


¡¡¡¡syscallN£¨ £©ºêÖ¸ÁîµÄµÚ1¸ö²ÎÊýint˵Ã÷²úÉúµÄº¯ÊýµÄ·µ»ØÖµµÄÀàÐÍÊÇÕûÐÍ£¬µÚ2¸ö²ÎÊýsetuid˵Ã÷²úÉúµÄº¯ÊýµÄÃû³Æ¡£ºóÃæÊÇϵͳµ÷ÓÃËùÐèÒªµÄÿ¸ö²ÎÊý¡£ÕâÒ»ºêÖ¸ÁîºóÃæ»¹ÓÐÁ½¸ö²ÎÊýuid_tºÍuid·Ö±ðÓÃÀ´Ö¸¶¨²ÎÊýµÄÀàÐͺÍÃû³Æ¡£

¡¡¡¡ÁíÍ⣬ÓÃ×÷ϵͳµ÷ÓõIJÎÊýµÄÊý¾ÝÀàÐÍÓÐÒ»¸öÏÞÖÆ£¬ËüÃǵÄÈÝÁ¿²»Äܳ¬¹ýËĸö×Ö½Ú¡£ÕâÊÇÒòΪִÐÐint $0x80Ö¸Áî½øÐÐϵͳµ÷ÓÃʱ£¬ËùÓеIJÎÊýÖµ¶¼´æÔÚ32λµÄCPU¼Ä´æÆ÷ÖС£Ê¹ÓÃCPU¼Ä´æÆ÷´«µÝ²ÎÊý´øÀ´µÄÁíÒ»¸öÏÞÖÆÊÇ¿ÉÒÔ´«Ë͸øÏµÍ³µ÷ÓõIJÎÊýµÄÊýÄ¿¡£Õâ¸öÏÞÖÆÊÇ×î¶à¿ÉÒÔ´«µÝ5¸ö²ÎÊý¡£ËùÒÔLinuxÒ»¹²¶¨ÒåÁË6¸ö²»Í¬µÄ_syscallN£¨£©ºêÖ¸Á´Ó_syscall0£¨£©¡¢_syscall1£¨£©Ö±µ½_syscall5£¨£©¡£

¡¡¡¡Ò»µ©_syscallN£¨£©ºêÖ¸ÁîÓÃÌØ¶¨ÏµÍ³µ÷ÓõÄÏàÓ¦²ÎÊý½øÐÐÁËÀ©Õ¹£¬µÃµ½µÄ½á¹ûÊÇÒ»¸öÓëϵͳµ÷ÓÃͬÃûµÄº¯Êý£¬Ëü¿ÉÒÔÔÚÓû§³ÌÐòÖÐÖ´ÐÐÕâһϵͳµ÷Óá£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 2 ÌõÆÀÂÛ

  1. lgms2008 ÓÚ 2006-11-07 09:58:57·¢±í:

    ¡¡¡¡ÏÖÔÚ£¬µ±ÖØÐÂÒýµ¼ÏµÍ³Ê±£¬ÔÚboot:Ìáʾ·ûºóÃæÓÐÈýÖÖÑ¡Ôñ£ºlinux-new ¡¢linux¡¢dos£¬ÐÂÄں˳ÉΪȱʡµÄÒýµ¼Äںˡ£

    ¡¡¡¡ÖÁ´Ë£¬ÐµÄLinuxÄÚºËÒѾ­½¨Á¢£¬ÐÂÌí¼ÓµÄϵͳµ÷ÓÃÒѳÉΪ²Ù×÷ϵͳµÄÒ»²¿·Ö£¬ÖØÐÂÆô¶¯Linux£¬Óû§¾Í¿ÉÒÔÔÚÓ¦ÓóÌÐòÖÐʹÓøÃϵͳµ÷ÓÃÁË¡£

    ¡¡¡¡£¨5£©Ê¹ÓÃеÄϵͳµ÷ÓÃ

    ¡¡¡¡ÔÚÓ¦ÓóÌÐòÖÐʹÓÃÐÂÌí¼ÓµÄϵͳµ÷ÓÃmycall¡£Í¬ÑùΪʵÑéÄ¿µÄ£¬ÎÒÃÇдÁËÒ»¸ö¼òµ¥µÄÀý×Óxtdy.c¡£

    ÒýÓÃ:
    ¡¡¡¡/* xtdy.c */

    ¡¡¡¡#include

    ¡¡¡¡_syscall1(int,mycall,int,ret)

    ¡¡¡¡main()

    ¡¡¡¡{

    ¡¡¡¡printf("%d \n",mycall(100));

    ¡¡¡¡}


    ¡¡¡¡±àÒë¸Ã³ÌÐò£º

    ÒýÓÃ:
    ¡¡¡¡# cc -o xtdy xtdy.c


    ¡¡¡¡Ö´ÐУº

    ÒýÓÃ:
    ¡¡¡¡# xtdy


    ¡¡¡¡½á¹û£º

    ÒýÓÃ:
    ¡¡¡¡# 100


    ¡¡¡¡×¢Ò⣬ÓÉÓÚʹÓÃÁËϵͳµ÷Ó㬱àÒëºÍÖ´ÐгÌÐòʱ£¬Óû§¶¼Ó¦¸ÃÊdz¬¼¶Óû§Éí·Ý¡£

  2. lgms2008 ÓÚ 2006-11-07 09:58:08·¢±í:

    ¡¡¡¡2 Ìí¼ÓеÄϵͳµ÷ÓÃ

    ¡¡¡¡Èç¹ûÓû§ÔÚLinuxÖÐÌí¼ÓеÄϵͳµ÷Óã¬Ó¦¸Ã×ñÑ­¼¸¸ö²½Öè²ÅÄÜÌí¼Ó³É¹¦£¬ÏÂÃæ¼¸¸ö²½ÖèÏêϸ˵Ã÷ÁËÌí¼Óϵͳµ÷ÓõÄÏà¹ØÄÚÈÝ¡£

    ¡¡¡¡£¨1£© Ìí¼ÓÔ´´úÂë

    ¡¡¡¡µÚÒ»¸öÈÎÎñÊDZàд¼Óµ½ÄÚºËÖеÄÔ´³ÌÐò£¬¼´½«Òª¼Óµ½Ò»¸öÄÚºËÎļþÖÐÈ¥µÄÒ»¸öº¯Êý£¬¸Ãº¯ÊýµÄÃû³ÆÓ¦¸ÃÊÇеÄϵͳµ÷ÓÃÃû³ÆÇ°Ãæ¼ÓÉÏsys_±êÖ¾¡£¼ÙÉèмӵÄϵͳµ÷ÓÃΪmycall(int number)£¬ÔÚ/usr/src/linux/kernel/sys.cÎļþÖÐÌí¼ÓÔ´´úÂ룬ÈçÏÂËùʾ£º

    ÒýÓÃ:
    ¡¡¡¡asmlinkage int sys_mycall(int number)

    ¡¡¡¡{

    ¡¡¡¡return number;

    ¡¡¡¡}


    ¡¡¡¡×÷Ϊһ¸ö×î¼òµ¥µÄÀý×Ó£¬ÎÒÃÇмӵÄϵͳµ÷Óýö½ö·µ»ØÒ»¸öÕûÐÍÖµ¡£

    ¡¡¡¡£¨2£© Á¬½ÓеÄϵͳµ÷ÓÃ

    ¡¡¡¡Ìí¼ÓеÄϵͳµ÷Óúó£¬ÏÂÒ»¸öÈÎÎñÊÇʹLinuxÄÚºËµÄÆäÓಿ·ÖÖªµÀ¸Ã³ÌÐòµÄ´æÔÚ¡£ÎªÁË´ÓÒÑÓеÄÄں˳ÌÐòÖÐÔö¼Óµ½Ðµĺ¯ÊýµÄÁ¬½Ó£¬ÐèÒª±à¼­Á½¸öÎļþ¡£

    ¡¡¡¡ÔÚÎÒÃÇËùÓõÄLinuxÄں˰汾£¨RedHat 6.0£¬ÄÚºËΪ2.2.5-15£©ÖУ¬µÚÒ»¸öÒªÐ޸ĵÄÎļþÊÇ£º

    ÒýÓÃ:
    ¡¡¡¡/usr/src/linux/include/asm-i386/unistd.h


    ¡¡¡¡¸ÃÎļþÖаüº¬ÁËϵͳµ÷ÓÃÇåµ¥£¬ÓÃÀ´¸øÃ¿¸öϵͳµ÷Ó÷ÖÅäÒ»¸öΨһµÄºÅÂë¡£ÎļþÖÐÿһÐеĸñʽÈçÏ£º

    ÒýÓÃ:
    ¡¡¡¡#define __NR_name NNN


    ¡¡¡¡ÆäÖУ¬nameÓÃϵͳµ÷ÓÃÃû³Æ´úÌæ£¬¶øNNNÔòÊǸÃϵͳµ÷ÓöÔÓ¦µÄºÅÂë¡£Ó¦¸Ã½«ÐµÄϵͳµ÷ÓÃÃû³Æ¼Óµ½Çåµ¥µÄ×îºó£¬²¢¸øËü·ÖÅäºÅÂëÐòÁÐÖÐÏÂÒ»¸ö¿ÉÓõÄϵͳµ÷Óúš£ÎÒÃǵÄϵͳµ÷ÓÃÈçÏ£º

    ÒýÓÃ:
    ¡¡¡¡#define __NR_mycall 191


    ¡¡¡¡ÏµÍ³µ÷ÓúÅΪ191£¬Ö®ËùÒÔϵͳµ÷ÓúÅÊÇ191£¬ÊÇÒòΪLinux-2.2ÄÚºË×ÔÉíµÄϵͳµ÷ÓúÅÂëÒѾ­Óõ½190¡£

    ¡¡¡¡µÚ¶þ¸öÒªÐ޸ĵÄÎļþÊÇ£º

    ÒýÓÃ:
    ¡¡¡¡/usr/src/linux/arch/i386/kernel/entry.S


    ¡¡¡¡¸ÃÎļþÖÐÓÐÀàËÆÈçϵÄÇåµ¥£º

    ÒýÓÃ:
    ¡¡¡¡.long SYMBOL_NAME£¨£©


    ¡¡¡¡¸ÃÇåµ¥ÓÃÀ´¶Ôsys_call_table[]Êý×é½øÐгõʼ»¯¡£¸ÃÊý×é°üº¬Ö¸ÏòÄÚºËÖÐÿ¸öϵͳµ÷ÓõÄÖ¸Õë¡£ÕâÑù¾ÍÔÚÊý×éÖÐÔö¼ÓÁËеÄÄں˺¯ÊýµÄÖ¸Õë¡£ÎÒÃÇÔÚÇåµ¥×îºóÌí¼ÓÒ»ÐУº

    ÒýÓÃ:
    ¡¡¡¡.long SYMBOL_NAME(sys_mycall)


    ¡¡¡¡£¨3£© ÖØ½¨ÐµÄLinuxÄÚºË

    ¡¡¡¡ÎªÊ¹ÐµÄϵͳµ÷ÓÃÉúЧ£¬ÐèÒªÖØ½¨LinuxµÄÄںˡ£ÕâÐèÒªÒÔ³¬¼¶Óû§Éí·ÝµÇ¼¡£

    ÒýÓÃ:
    ¡¡¡¡#pwd
    ¡¡¡¡/usr/src/linux
    ¡¡¡¡#


    ¡¡¡¡³¬¼¶Óû§ÔÚµ±Ç°¹¤×÷Ŀ¼£¨/usr/src/linux£©Ï£¬²Å¿ÉÒÔÖØ½¨Äںˡ£

    ÒýÓÃ:
    ¡¡¡¡#make config
    ¡¡¡¡#make dep
    ¡¡¡¡#make clearn
    ¡¡¡¡#make bzImage


    ¡¡¡¡±àÒëÍê±Ïºó£¬ÏµÍ³Éú³ÉÒ»¿ÉÓÃÓÚ°²×°µÄ¡¢Ñ¹ËõµÄÄÚºËÓ³ÏóÎļþ£º

    ÒýÓÃ:
    ¡¡¡¡/usr/src/linux/arch/i386/boot/bzImage
    ¡¡

    ¡¡¡¡£¨4£© ÓÃеÄÄÚºËÆô¶¯ÏµÍ³

    ¡¡¡¡ÒªÊ¹ÓÃеÄϵͳµ÷Óã¬ÐèÒªÓÃÖØ½¨µÄÐÂÄÚºËÖØÐÂÒýµ¼ÏµÍ³¡£Îª´Ë£¬ÐèÒªÐÞ¸Ä/etc/lilo.confÎļþ£¬ÔÚÎÒÃǵÄϵͳÖУ¬¸ÃÎļþÄÚÈÝÈçÏ£º

    ÒýÓÃ:
    ¡¡¡¡boot=/dev/hda
    ¡¡¡¡map=/boot/map
    ¡¡¡¡install=/boot/boot.b
    ¡¡¡¡prompt
    ¡¡¡¡timeout=50

    ¡¡¡¡image=/boot/vmlinuz-2.2.5-15
    ¡¡¡¡label=linux
    ¡¡¡¡root=/dev/hdb1
    ¡¡read-only

    ¡¡¡¡other=/dev/hda1
    ¡¡¡¡label=dos
    ¡¡¡¡table=/dev/had


    ¡¡¡¡Ê×Ïȱ༭¸ÃÎļþ£¬Ìí¼ÓеÄÒýµ¼Äںˣº

    ÒýÓÃ:
    ¡¡¡¡image=/boot/bzImage-new
    ¡¡¡¡label=linux-new
    ¡¡¡¡root=/dev/hdb1
    ¡¡¡¡read-only


    ¡¡¡¡Ìí¼ÓÍê±Ï£¬¸ÃÎļþÄÚÈÝÈçÏÂËùʾ£º

    ÒýÓÃ:
    ¡¡¡¡boot=/dev/hda
    ¡¡¡¡map=/boot/map
    ¡¡¡¡install=/boot/boot.b
    ¡¡¡¡prompt
    ¡¡¡¡timeout=50

    ¡¡¡¡image=/boot/bzImage-new
    ¡¡¡¡label=linux-new
    ¡¡¡¡root=/dev/hdb1
    ¡¡¡¡read-only

    ¡¡¡¡image=/boot/vmlinuz-2.2.5-15
    ¡¡¡¡label=linux
    ¡¡¡¡root=/dev/hdb1
    ¡¡¡¡read-only

    ¡¡¡¡other=/dev/hda1
    ¡¡¡¡label=dos
    ¡¡¡¡table=/dev/hda


    ¡¡¡¡ÕâÑù£¬ÐµÄÄÚºËÓ³ÏóbzImage-new³ÉΪȱʡµÄÒýµ¼Äںˡ£ÎªÁËʹÓÃеÄlilo.confÅäÖÃÎļþ£¬»¹Ó¦Ö´ÐÐÏÂÃæµÄÃüÁ

    ÒýÓÃ:
    ¡¡¡¡#cp /usr/src/linux/arch/i386/boot/zImage /boot/bzImage-new


    ¡¡¡¡Æä´ÎÅäÖÃlilo:

    ÒýÓÃ:
    ¡¡¡¡# /sbin/lilo