µ±Ç°Ê±Çø GMT+8, ÏÖÔÚʱ¼äÊÇ 2008-8-29 03:34 ÓοÍ: ×¢²á µÇ¼ ½öµÇ¼ÂÛ̳ | ËÑË÷ °ïÖú


±êÌâ: ²»ºÃÒâ˼£¬»¹ÊǹØÓÚgdbserver^_^!
dttnetchong
ÐÂÊÖÉÏ·
Rank: 1


UID 133294
¾«»ª 1
»ý·Ö 18
Ìû×Ó 5
ÔĶÁȨÏÞ 10
×¢²á 2004-6-14
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-16 23:36  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ  Ìí¼Ó dttnetchong ΪMSNºÃÓѠͨ¹ýMSNºÍ dttnetchong ½»Ì¸
²»ºÃÒâ˼£¬»¹ÊǹØÓÚgdbserver^_^!

½ñÌì»»Á˲»Í¬³ÌÐò·´¸´ÊÔÁËÒ»ÏÂgdbserver£¬·Â·ð¿ÉÒÔÁ¬½Ó,µ«Í¨ÐÅʱ¶¼»á³öÈçÏ´íÎó,
uclinux-skyeye¶ËÏÈÆô¶¯
/bin> gdbserver host:1234 mytest
Process mytest created; pid = 19
code at 0x13a0040 - 0x13a5d00, data at 0x13a5d04

Ö÷»ú¶Ë
(gdb) target remote 10.0.0.2:1234
Remote debugging using 10.0.0.2:1234
Couldn't establish connection to remote target
Reply contains invalid hex digit 59
^^^^^^^^^^^^^^^^^^^^^

uclinux-skyeye¶Ë£º
Remote debugging using host:1234
readchar: Got EOF
^^^^^^^^^^^^
Remote side has terminated connection.  GDBserver will reopen the connection.

ÉϴΰßÖñ´ó¸çÔø¾­¸æËßÎÒÔÚat91ÉÏuclinux on skyeyeµÄgdbserverÐèÒªÐ޸쬴ÓÉÏÃæµÄ´íÎó£¬ÊÇ·ñ¿ÉÒÔÖªµÀÈçºÎÈëÊÖ£¬²»ÖªµÀË­ÓÐûÓо­Ñé¿ÉÒÔ½éÉÜÒ»ÏÂ

¶¥²¿
dttnetchong
ÐÂÊÖÉÏ·
Rank: 1


UID 133294
¾«»ª 1
»ý·Ö 18
Ìû×Ó 5
ÔĶÁȨÏÞ 10
×¢²á 2004-6-14
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-16 23:44  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ  Ìí¼Ó dttnetchong ΪMSNºÃÓѠͨ¹ýMSNºÍ dttnetchong ½»Ì¸
ÁíÍ⣬ÎÒµÄÐéÄâÍø¿¨×°ºÃÖ®ºó£¬
uclinux-skyeyeÉÏpingÖ÷»úʱ£¬·µ»ØµÄʱÑÓ¼¸ºõ¶¼ÊǸºÖµ£¬

/> ifconfig eth0 up 10.0.0.2

/> route add -net 172.18.19.0 netmask 255.255.255.0 gw 10.0.0.1 eth0

/> ping 172.18.19.45

PING 172.18.19.45 (172.18.19.45):56 data bytes

64 bytes from 172.18.19.45: icmp_seq=0 ttl=64 time=0.-6 ms

64 bytes from 172.18.19.45: icmp_seq=1 ttl=64 time=0.-5 ms

64 bytes from 172.18.19.45: icmp_seq=2 ttl=64 time=0.-6 ms

64 bytes from 172.18.19.45: icmp_seq=3 ttl=64 time=0.-5 ms

»¹ÓдÓÖ÷»úÓÃÄܹ»tftpµÇ½£¬µ«Ö®ºó¸ù±¾´«²»Á˶«Î÷¡£
ÊDz»ÊÇÎÒʲôµØ·½»¹Ã»×ö¶Ô£¿

¶¥²¿
magicsurfer
ÐÂÊÖÉÏ·
Rank: 1


UID 27639
¾«»ª 0
»ý·Ö 3
Ìû×Ó 1
ÔĶÁȨÏÞ 10
×¢²á 2003-4-9
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-17 07:39  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
ÎÒµÄÒ²ÊǸºÖµ,²»ÖªµÀÔõô»ØÊÂѽ

¶¥²¿
dttnetchong
ÐÂÊÖÉÏ·
Rank: 1


UID 133294
¾«»ª 1
»ý·Ö 18
Ìû×Ó 5
ÔĶÁȨÏÞ 10
×¢²á 2004-6-14
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-17 13:59  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ  Ìí¼Ó dttnetchong ΪMSNºÃÓѠͨ¹ýMSNºÍ dttnetchong ½»Ì¸
ÔÚgdbserver²»ÄÜʹÓõÄÇé¿öÏ£¬Èç¹ûÒªµ÷ÊÔÔËÐÐÔÚuclinux on skeyeÉϵÄÓ¦ÓóÌÐò£¬³öÁ˰Ñgdb±àÒë½øuclinuxÖ®Í⻹ÓÐûÓÐʲôÆäËû¿ÉÐеİ취£¿

      ÎÒÏë³ýÁ˵÷ÊÔѧϰÄÚºËÖ®Í⣬ÓкܶàÈËÊÇÔÚȱ·¦Ó²¼þ»·¾³µÄÇé¿öÏ£¬Ï£ÍûΪӦÓóÌÐòµÄ¿ª·¢´î½¨Ò»¸öÐéÄâµÄÓ²¼þ·ÂÕæÈí¼þ»·¾³£¬ÄÜÔÚÉÏÃæ¿ª·¢»òÒÆÖ²Ó¦ÓóÌÐò¡£     
       ×î½üÎÒÓÐÒ»¸öÈÎÎñÊǽ«Ç¶ÈëʽjavaÐéÄâ»úkvmÒÆÖ²µ½arm-uclinuxƽ̨ÉÏ,ËùÒÔÎÒÏëÔÚskyeyeÉϽøÐе÷ÊÔ£¬ÒÔǰһֱÊÇ×öÉϲãµÄ£¬¸úÓû§½»»¥µÄ¶«Î÷£¬¶ÔǶÈëʽ¿ª·¢½Ó´¥Ã»¶à¾Ã£¬Ï£ÍûÄܸú´ó¼Ò¶à½»Á÷£¬¹ØÓÚuclinux on skyeyeÉÏÓ¦ÓóÌÐòµ÷ÊÔ»·¾³µÄ½¨Á¢£¬Ï£ÍûÄܵõ½´ó¼ÒµÄÖ¸µã¡£

¶¥²¿
prox2004
×¢²á»áÔ±
Rank: 2


UID 117847
¾«»ª 1
»ý·Ö 108
Ìû×Ó 41
ÔĶÁȨÏÞ 20
×¢²á 2004-4-22
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-18 19:17  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
²»ÖªµÀÄãµÄ¾ßÌåÇé¿ö.²»¹ýÎÒÔÚʹÓÃgdbserverÒ²ÓÐ
Reply contains invalid hex digit 59
µÄÎÊÌâ.
¼ì²éÁËÒ»ÏÂ,ÎÒÊÇÖ±½Ó²ÉÓõÄuclinux-disc°ü,ÀïÃæµÄ
gdbserver¸ù±¾ÊÇfor m68k,not for arm.
ÎÒ¼òµ¥¸Ä¶¯ÁËÒ»ÏÂgdbserverºÍuclinuxµÄ´úÂëfor arm,
gdbserver ¿ÉÒÔÖ´ÐÐ,µ«ÊÇÎÞ·¨Ö§³Ö¶Ïµã.
¿´À´Õâ¸öuclinux-disc´øµÄgdbserverȷʵÓв»ÉÙÎÊÌâ.
½¨Òé
1)Èç¹ûgoogle¿´Ã»ÓÐÏֳɵÄ,Ä
²»¿¼ÂÇÌå»ý´ó,¿ÉÒÔ¿¼ÂDZàÒë¹Ù·½°æ±¾µÄgdbserver
2)Á·ÊÖ,¼ÌÐøÐÞ¸Äuclinux-disc,ÓÐÐËȤ¿ÉÒÔºÍÎÒÁªÏµ

¶¥²¿
prox2004
×¢²á»áÔ±
Rank: 2


UID 117847
¾«»ª 1
»ý·Ö 108
Ìû×Ó 41
ÔĶÁȨÏÞ 20
×¢²á 2004-4-22
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-21 13:52  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
×ÜË㽫uClinux disc×Ô´øµÄgdbserver for m68k¸Ä³ÉÁËfor arm-uclinuxµÄ°æ±¾.º
Ö»ÐèÒª¼ÓÒ»¸öµ÷²âħÊýµÄת»»¾Í¿ÉÒÔÖ§³Ö
¶Ïµã.¸Ä¶¯Á¿ºÜС.ÎÒÃèÊöÒ»ÏÂgdbserver for arm-uclinuxµÄ¾ßÌå˼·:
ûÓо­¹ý¶à´Îµ÷ÊÔ,¿ÉÄÜÓкܶàÎÊÌâ
1)Ôö¼ÓºÍtm-m68k.h¶ÔÓ¦µÄtm-arm.h,ÐèÒªÓÐÈç϶¨Òå:
#define REGISTER_RAW_SIZE(x)  4
#define REGISTER_BYTES (17*4)
#define REGISTER_BYTE(x) (4*x)
#define NUM_REGS 17
#define MAX_REGISTER_RAW_SIZE   4
#define NUM_FREGS 0
#define PC_REGNUM 15
#define SP_REGNUM 13
#define FP_REGNUM 14
2)low-linux.cÓÃÈçϵÄarm_register_u_addr´úÌæm68k_linux_register_u_addr
static int regmap[] =
{
  0,  1,  2,  3,
  4,  5,  6,  7,
  8,  9, 10, 11,
12, 13, 14, 15,
16, 17
}; //p.357
int
arm_register_u_addr (blockend, regnum)
     int blockend;

     int regnum;
{
    return (blockend + 4 * regmap[regnum]);
}   

3)Ö§³Ö¶Ïµã,ÔÚserver.cÖÐ
extern unsigned int code_end;
extern unsigned int code_start;
#define ARM_BREAKPOINT      0xe7ffdefe
#define ARM_LINUX_BREAKPOINT    0xef9f0001
void bp_opcode_conv(unsigned long addr, unsigned long *p_op)
{
    if( addr < code_start || addr > code_end ) return ;
    if( *p_op != ARM_BREAKPOINT) return ;
    *p_op = ARM_LINUX_BREAKPOINT;
}   

main()ÖÐÔö¼ÓÒ»ÐÐ
case 'M':
          decode_M_packet (&own_buf[1], &mem_addr, &len, mem_buf);
          bp_opcode_conv( (unsigned long) mem_addr,
                  (unsigned long*)mem_buf );  //added ...
.....

4)´ËÍâÎÒµÄuclinux kernel ptrace.cÒ²ÐÞ¸ÄÁËÒ»ÏÂ.²»¹ý¼ÈȻ¥Ö÷ÓÐ
code at 0x13a0040 - 0x13a5d00, data at 0x13a5d04
ÏûÏ¢´òÓ¡,ÄǾͲ»ÓÃÐÞ¸ÄÁË

¶¥²¿
chyyuu
¹«Éç°æÖ÷



UID 37477
¾«»ª 23
»ý·Ö 1949
Ìû×Ó 727
ÔĶÁȨÏÞ 225
×¢²á 2003-5-15
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-23 00:23  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
prox2004, ÄãÐÞ¸Ägdbserverºó¿ÉÒÔÔÚSkyEye for AT91Éϵ÷ÊÔÓ¦ÓóÌÐòÁËÂð£¿
¼±ÇеÄÎÊ£¡

¶¥²¿
chyyuu
¹«Éç°æÖ÷



UID 37477
¾«»ª 23
»ý·Ö 1949
Ìû×Ó 727
ÔĶÁȨÏÞ 225
×¢²á 2003-5-15
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-23 00:35  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
¿Â½ðË®£¨Î人һÑо¿Éú kedafilm@sina.com£© 2003£­10£­29 ¸øÎÒ·¢µÄemail¡£
Òâ˼ÊÇgdbserver for arm-elf ÐèÒªÐ޸ĺʹò²¹¶¡£¬²»ÄÜÖ±½ÓÓÃuclinux´øµÄ¡£
¹©²Î¿¼¡£

¸½½üÀïÃæÊÇÎÒ×¥µÄÁ½¸öͼ£¬¸øÄú¿´¿´¡£
   ¾ÍÎҵĸоõ£¬skyeyeÔÚÔ¶³Ìµ÷ÊÔÉÏ¿ÉÄÜ»¹ÊÇ´æÔÚÒ»µãÎÊÌâµÄ¡£ÎÒ»»ÁËÒ»¸ögdbserver£¬È»ºóÔÚuclinuxÉÏÖ´ÐÐgdbserver£¬
    ÔÚlinuxÉÏÖ´ÐÐarm-elf-gdb£¬½á¹ûÊÇÁ¬½ÓÊǽ¨Á¢ÆðÀ´ÁË£¨ÒÔǰÊÇ×ö²»µ½µÄ£©£»
    Ôø¾­ÓÐÒ»´Î£¬ÎÒÉèÖÃÁ˶ϵãºó£¬ÇÃcÃüÁ¿ÉÒÔÖ´Ðе½¶Ïµã´¦£¬¸Ð¾õ»ù±¾ÉÏ¿ÉÒÔÖ§³ÖÔ¶³Ìµ÷ÊÔÁË£¬µ«²»ÖªµÀÔõô»ØÊ£¬ºóÀ´¾Í²»ÐÐÁË£¬Ö»ÊÇ¿ÉÒÔ½¨Á¢Á¬½Ó£¬Ô­ÒòÎÒһֱûÓиãÃ÷°×¡££¨¿ÉÄÜÓëÎÒÖØÐ±àÒëÄÚºËÓйأ¿£©
    ¸½½üÀïÃæ»¹ÓÐÒ»¸ö¾Ý˵ÊÇ´òÁ˲¹¶¡µÄgdbserver£¨ÎÒ²»ÖªµÀÏÂÔØµØÖ·£¬ºÇºÇ£¬ËµÊÇרÃÅΪarm µ÷ÊÔ´òµÄ£©£¬Ò»²¢·¢¸øÄú

¶¥²¿
chyyuu
¹«Éç°æÖ÷



UID 37477
¾«»ª 23
»ý·Ö 1949
Ìû×Ó 727
ÔĶÁȨÏÞ 225
×¢²á 2003-5-15
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-23 00:36  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
¿Â½ðË®£¨Î人һÑо¿Éú kedafilm@sina.com£© 2003£­10£­29 ¸øÎÒ·¢µÄemail¡£
Òâ˼ÊÇgdbserver for arm-elf ÐèÒªÐ޸ĺʹò²¹¶¡£¬²»ÄÜÖ±½ÓÓÃuclinux´øµÄ¡£
¹©²Î¿¼¡£

¸½½üÀïÃæÊÇÎÒ×¥µÄÁ½¸öͼ£¬¸øÄú¿´¿´¡£
   ¾ÍÎҵĸоõ£¬skyeyeÔÚÔ¶³Ìµ÷ÊÔÉÏ¿ÉÄÜ»¹ÊÇ´æÔÚÒ»µãÎÊÌâµÄ¡£ÎÒ»»ÁËÒ»¸ögdbserver£¬È»ºóÔÚuclinuxÉÏÖ´ÐÐgdbserver£¬
    ÔÚlinuxÉÏÖ´ÐÐarm-elf-gdb£¬½á¹ûÊÇÁ¬½ÓÊǽ¨Á¢ÆðÀ´ÁË£¨ÒÔǰÊÇ×ö²»µ½µÄ£©£»
    Ôø¾­ÓÐÒ»´Î£¬ÎÒÉèÖÃÁ˶ϵãºó£¬ÇÃcÃüÁ¿ÉÒÔÖ´Ðе½¶Ïµã´¦£¬¸Ð¾õ»ù±¾ÉÏ¿ÉÒÔÖ§³ÖÔ¶³Ìµ÷ÊÔÁË£¬µ«²»ÖªµÀÔõô»ØÊ£¬ºóÀ´¾Í²»ÐÐÁË£¬Ö»ÊÇ¿ÉÒÔ½¨Á¢Á¬½Ó£¬Ô­ÒòÎÒһֱûÓиãÃ÷°×¡££¨¿ÉÄÜÓëÎÒÖØÐ±àÒëÄÚºËÓйأ¿£©
    ¸½½üÀïÃæ»¹ÓÐÒ»¸ö¾Ý˵ÊÇ´òÁ˲¹¶¡µÄgdbserver£¨ÎÒ²»ÖªµÀÏÂÔØµØÖ·£¬ºÇºÇ£¬ËµÊÇרÃÅΪarm µ÷ÊÔ´òµÄ£©£¬Ò»²¢·¢¸øÄú

¶¥²¿
prox2004
×¢²á»áÔ±
Rank: 2


UID 117847
¾«»ª 1
»ý·Ö 108
Ìû×Ó 41
ÔĶÁȨÏÞ 20
×¢²á 2004-4-22
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-23 09:17  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
¿ÉÒÔ½øÐÐSkyEye for AT91ÉÏÓ¦ÓóÌÐòµÄµ÷ÊÔ
¿ÂÏÈÉúÌáµ½µÄÎÊÌâÃèÊöµÃºÃÏó²»Ì«Çå³þ,
ÎÒֻ˵Ã÷ÎÒÓöµ½µÄÎÊÌâ.
δ×÷3)µÄÐÞ¸Äǰ,¶ÏµãÊDz»ÄÜ´òµÄ.
gdb for armµÄÈí¶ÏµãÊÇ0xe7ffdefe,
Õâ¸ömagic,skyeyeÒ²×÷ÁËרÃŵIJ¶×½.
ÕâÑùskyeye emulate¾Í»áÍ£ÔÚÕâ¾ä²»ÄÜÖ´ÐÐ.
ÎÒÔø¾­Ð޸Ĺýskyeye,ÈÃËü¼ÌÐøÖ´ÐÐ,
½á¹û¸üÔã,uclinuxËÀloop.
arm710_bug_check¶Ô0xe7ffdefeµÄ´¦ÀíºÜÆæ¹Ö.
ËùÒÔ,²ÉÓÃ0xef9f0001´úÌæ0xe7ffdefe×÷ΪÈí¶Ïµã
ÁíÍâ,³ÂÀÏʦÊÕµ½ÎÒµÄÕ¾ÄÚ¶ÌÐÅô?

¶¥²¿
frame
ÐÂÊÖÉÏ·
Rank: 1


UID 135679
¾«»ª 0
»ý·Ö 10
Ìû×Ó 4
ÔĶÁȨÏÞ 10
×¢²á 2004-6-23
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-6-24 21:42  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
dttnetchong£¬ÄãºÃ£¬×î½üÎÒÒ²ÔÚ×ö¹ØÓÚǶÈëʽjavaÐéÄâ»úkvmÒÆÖ²µ½uclinuxƽ̨µÄ¹¤×÷£¬ÏÖÔÚ»¹Ã»ÓÐÕÒµ½Ê²Ã´½â¾ö°ì·¨ÁË¡£²»ÖªµÀÄãÓÐûÓÐʲô½øÕ¹£¬ÊÇ·ñ¿ÉÒÔÑ¡ÔñÆäËû°æ±¾µÄǶÈëʽlinux£¬Çë¸÷λִ½Ì

¶¥²¿
chyyuu
¹«Éç°æÖ÷



UID 37477
¾«»ª 23
»ý·Ö 1949
Ìû×Ó 727
ÔĶÁȨÏÞ 225
×¢²á 2003-5-15
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-7-1 23:08  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
prox2004ÒѾ­»ù±¾½â¾öÁËgdb µ÷ÊÔskyeye for at91ÉÏÅܵÄÓ¦ÓóÌÐòµÄÎÊÌâ!!!

¶¥²¿
houen
ÐÂÊÖÉÏ·
Rank: 1


UID 105093
¾«»ª 0
»ý·Ö 23
Ìû×Ó 9
ÔĶÁȨÏÞ 10
×¢²á 2004-3-17
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-7-3 09:19  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
Äǵ½µ×ÈçºÎ½â¾ögdb µ÷ÊÔskyeye for at91ÉÏÅܵÄÓ¦ÓóÌÐòµÄÎÊÌâÄØ?

¶¥²¿
chyyuu
¹«Éç°æÖ÷



UID 37477
¾«»ª 23
»ý·Ö 1949
Ìû×Ó 727
ÔĶÁȨÏÞ 225
×¢²á 2003-5-15
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-7-3 17:01  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
Ï£Íûprox2004½éÉÜһϣ¡

¶¥²¿
prox2004
×¢²á»áÔ±
Rank: 2


UID 117847
¾«»ª 1
»ý·Ö 108
Ìû×Ó 41
ÔĶÁȨÏÞ 20
×¢²á 2004-4-22
À´×Ô China.gif
״̬ ÀëÏß
·¢±íÓÚ 2004-7-13 16:43  ×ÊÁÏ  ¶ÌÏûÏ¢  ¼ÓΪºÃÓÑ 
-------
ÉϴκÃÏñÓÐ0D0A¸ñʽÎÊÌâ.
-------
¸½¼þÊÇÕû¸öÐ޸ĺóµÄgdbserver,°üÀ¨uclinux2.4.17kernel ptrace.c
±¾À´Ð޸ıȽÏÉÙ,²»Ïë°ÑÕû¸ö¶«Î÷·ÅÉÏÀ´.
²»¹ý,ÓÐЩÅóÓÑÒª,»¹ÊDz»Ì«·½±ã,¾Í·ÅÔÚÕâÀïÁË.
0)È«²¿ÐÞ¸ÄÎÒÒѾ­´«¸øchyyuu,²»¹ýĿǰֻÓб¾È˵IJâÊÔ
1)gdbserver:     
Ç°ÃæÎÒдµÄ¾ÍÊǶÔgdbserver±¾ÉíµÄÈ«²¿ÐÞ¸Ä.
2)uclinux kernel2.4.17:
a.µ«ÊÇuclinux2.4.17 for at91(ÎÒ²âÊԵİ汾)ȱʡÔËÐеÄflat³ÌÐòÊÇÔÚUSER26ModeÏÂ,
²»ÊÇUSER32Mode.ÕâÑù,gdbserver/skyeye(client)µÄµ¥²½ÔËÐоͻá³öÎÊÌâ.
ÎÒÐÞ¸ÄÁËarch/armnommu/kernel/ptrace.c,ÒÔÖ§³ÖÕâÖÖÇé¿ö.
b.uclinuxµÄptraceûÓжÔÄÚ´æ¶Áд×öÏÞÖÆ,ºÜÈÝÒ׸㵽½ø³ÌÍâÄÚ´æ
//added by telpro
#define REG_SP 13

int in_arm26_mode(struct task_struct *child)
{
        long psr;
        psr = get_stack_long(child, REG_PSR) ;
        return ((psr & 0x1f) <= 3);
}

#define FIXPC(child, x)        \   
        do {            \
                if(in_arm26_mode(child)) x = x & 0x0ffffffc; \
        }while(0)

//do as arch/armnommu/kernel/process.c
//a dirty version, FIXME...telpro
int is_addr_access( struct task_struct *child,
                      unsigned long addr )     
{
        unsigned long sp;
        if ( addr >= child->mm->start_code &&
             addr < child->mm->end_code )
                return 1;

        if ( addr >= child->mm->start_data &&
             addr <  child->mm->brk )
                return 1;
        sp = get_stack_long(child, REG_SP) ;
        //actually <sp is r/w also.
        if ( addr >= sp &&
             addr < child->mm->start_stack )
                return 1;
        return 0;
}
int ptrace_set_bpt(struct task_struct *child)
{
        struct pt_regs *regs;
        unsigned long pc, insn;
        int res;

        regs = get_user_regs(child);
        pc = instruction_pointer(regs);
        //26bit , added by telpro
        FIXPC(child, pc);

        res = read_tsk_long(child, pc, &insn);
        if (!res) {
                struct debug_info *dbg = &child->thread.debug;
                unsigned long alt;

                dbg->nsaved = 0;

                alt = get_branch_address(child, pc, insn);
                if (alt) {  
                        FIXPC(child, alt); //added by telpro
                        res = add_breakpoint_arm(child, dbg, alt);
                }   
.........
}
static int do_ptrace(int request, struct task_struct *child, long addr, long data)              
ÖмÓÈë
                case PTRACE_PEEKTEXT:
                case PTRACE_PEEKDATA:
                        /*added by telpro*/
                        if (!is_addr_access(child, addr) ) {
                                ret = -EIO;
                                break;
                        }
                        ret = read_tsk_long(child, addr, &tmp);  
....
                case PTRACE_POKETEXT:
                case PTRACE_POKEDATA:
                        /*added by telpro*/
                        if (!is_addr_access(child, addr) ) {
                                ret = -EIO;
                                break;
                        }
                        ret = write_tsk_long(child, addr, data);
                        break;  
.......
   case PTRACE_PEEKUSR:
                        ret = -EIO;
                        if ((addr & 3) || addr < 0 || addr >= sizeof(struct user))
                                break;

                        tmp = 0;  /* Default return condition */
                        if (addr < sizeof(struct pt_regs)) {
                                tmp = get_stack_long(child, (int)addr >> 2);
                                //added by telpro, for at91
                                if(addr == 14*4 || addr == 15*4 ) {
                                        FIXPC(child, tmp);
                                }
                        } else if (addr == 49*4) {
                                tmp = child->mm->start_code;
                        } else if (addr == 50*4) {
                                tmp = child->mm->start_data;
                        } else if (addr == 51*4) {      
.....
3)ÒÑÖªÎÊÌâ
a.ÏÖÔÚ¶ÔUSER26MOdeµÄÓ¦ÓóÌÐò²»ÊÇÖ§³ÖµÃºÜºÃ,
r14,r15Êǰ´ÕÕUSER32ModeÏÔʾµÄ½á¹û.
ÕâÊDz»¶ÔµÄ.
ÍêÕûµÄ½â¾öÐèÒªÐÞ¸Äclient¶ËÈí¼þ,Ò²¾ÍÊÇskyeyeÓëgdbserverÅäºÏµÄ²¿·Ö.
²»¹ý,USER26×ܸоõÊÇÒ»ÖÖÌÔ̭ģʽ,xscaleÕâЩÒѾ­²»Ö§³ÖËüÁË.
Òò´Ë,Ò²²»Ï뻨´óÁ¦ÆøÈ¥½â¾ö.
b.Thumbģʽ²»Ö§³Ö



 ¸½¼þ: ÄúËùÔÚµÄÓû§×éÎÞ·¨ÏÂÔØ»ò²é¿´¸½¼þ
¶¥²¿
 


Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Çå³ý Cookies - ÁªÏµÎÒÃÇ - ÖйúLinux¹«Éç - WAP