LinuxÏÂʹÓÃGDBµ÷ÊÔǶÈëʽARM»ã±àÓÅ»¯µÄ³ÌÐòµÄ³£¼ûÉèÖÃÒªÁì
linuxÏÂʹÓÃgdbµ÷ÊÔǶÈëʽarm»ã±àÓÅ»¯µÄ³ÌÐòµÄ³£¼ûÉèÖÃÒªÁì
ÔÚǶÈëʽϵͳ¿ª·¢ÖУ¬ARM¼Ü¹¹µÄоƬÊǷǾ³£¼ûµÄÑ¡Ôñ¡£¶øÔÚARM»ã±à³ÌÐòµÄ±àдÀú³ÌÖУ¬ÓÅ»¯ÊDz»¿É»òȱµÄÒ»²¿·Ö£¬ÓÉÓÚËü¿ÉÒÔÏÔÖøÌá¸ß³ÌÐòµÄÐÔÄÜ¡£È»¶ø£¬ÓÉÓÚÓÅ»¯Óë´úÂëµÄ¼ò»¯ºÍÖØ×éÓйأ¬ÕâÒ²¸øµ÷ÊÔ´øÀ´ÁËÒ»¶¨µÄÄÑÌâ¡£±¾ÎĽ«ÏÈÈÝÔõÑùʹÓÃGDBÀ´µ÷ÊÔǶÈëʽARM»ã±àÓÅ»¯µÄ³ÌÐò£¬²¢ÌṩһЩ³£¼ûµÄÉèÖÃÒªÁìºÍ´úÂëʾÀý¡£
Ò»¡¢ÇéÐÎÉèÖÃ
×°ÖÃARM½»Ö¯±àÒ빤¾ßÁ´
Ê×ÏÈ£¬ÎÒÃÇÐèҪװÖÃARM½»Ö¯±àÒ빤¾ßÁ´£¬ÒÔ±ãÔÚLinuxÇéÐÎϱàÒëARM»ã±à³ÌÐò¡£³£ÓõÄARM½»Ö¯±àÒ빤¾ßÁ´ÓÐgcc£¬binutilsµÈ¡£¿ÉÒÔͨ¹ýÒÔÏÂÏÂÁîÀ´×°Öãº
sudo apt-get install gcc-arm-linux-gnueabi
µÇ¼ºó¸´ÖÆ
±àдARM»ã±àÓÅ»¯µÄ³ÌÐò
½ÓÏÂÀ´£¬±àдһ¸ö¼òÆÓµÄARM»ã±àÓÅ»¯³ÌÐò×÷ΪʾÀý¡£ÏÂÃæÊÇÒ»¸ö¼Ó·¨º¯ÊýµÄʾÀý´úÂ룺
.global add .thumb_func add: mov r2, r0 add r0, r1, r0 bx lr
µÇ¼ºó¸´ÖÆ
ÒÔÉÏ´úÂëʵÏÖÁËÁ½¸öÊýµÄ¼Ó·¨²Ù×÷£¬²¢Ê¹ÓÃbx lrÖ¸Áî·µ»ØŲÓÃÕß¡£
±àÒëºÍÔËÐгÌÐò
ʹÓý»Ö¯±àÒ빤¾ßÁ´½«»ã±à´úÂë±àÒë³É¿ÉÖ´ÐÐÎļþ£¬ÀýÈ磺
arm-linux-gnueabi-gcc -o test test.s
µÇ¼ºó¸´ÖÆ
È»ºó£¬ÔËÐÐÌìÉúµÄ¿ÉÖ´ÐÐÎļþ£º
qemu-arm ./test
µÇ¼ºó¸´ÖÆ
¶þ¡¢Ê¹ÓÃGDBµ÷ÊÔÓÅ»¯µÄARM»ã±à³ÌÐò
ÉèÖÃÆô¶¯GDB
¿ÉÒÔͨ¹ýÒÔÏÂÏÂÁîÆô¶¯GDB£¬²¢¼ÓÔØ¿ÉÖ´ÐÐÎļþ£º
arm-linux-gnueabi-gdb -q test
µÇ¼ºó¸´ÖÆ
ÉèÖöϵã
ÔÚGDBÖУ¬¿ÉÒÔʹÓÃbreakÏÂÁîÉèÖöϵ㡣ÀýÈ磬ÎÒÃÇ¿ÉÒÔÉèÖöϵãÔÚº¯ÊýµÄÈë¿Ú´¦£º
(gdb) break add
µÇ¼ºó¸´ÖÆ
Æô¶¯³ÌÐòµ÷ÊÔ
ʹÓÃrunÏÂÁîÆô¶¯³ÌÐòµ÷ÊÔ£º
(gdb) run
µÇ¼ºó¸´ÖÆ
³ÌÐò½«ÔÚÉèÖõĶϵ㴦ͣÏÂÀ´¡£
µ¥²½Ö´ÐгÌÐò
ʹÓÃstepiÏÂÁî¾ÙÐе¥²½Ö´ÐгÌÐò£¬¿ÉÒÔÖðÌõÖ´ÐÐARM»ã±àÖ¸Áî¡£ÀýÈ磺
(gdb) stepi
µÇ¼ºó¸´ÖÆ
Éó²é¼Ä´æÆ÷ºÍÄÚ´æ
ÔÚµ÷ÊÔÀú³ÌÖУ¬ÎÒÃÇ¿ÉÒÔʹÓÃinfo registersÏÂÁîÀ´Éó²é¼Ä´æÆ÷µÄÖµ£¬Ê¹ÓÃxÏÂÁîÀ´Éó²éÄÚ´æµÄÄÚÈÝ¡£ÀýÈ磺
(gdb) info registers (gdb) x/4xw $sp
µÇ¼ºó¸´ÖÆ
µ÷ÊÔ¿¢ÊÂ
ÔÚµ÷ÊÔ¿¢Êº󣬿ÉÒÔʹÓÃquitÏÂÁîÍ˳öGDB¡£
Èý¡¢×¢ÖØÊÂÏî
ʹÓþ²Ì¬Á´½Ó¿â
ÔÚ±àÒëÓÅ»¯µÄARM»ã±à³ÌÐòʱ£¬Ó¦¸ÃÈ·±£¾²Ì¬Á´½ÓËùÓÐÐèÒªµÄ¿âÎļþ£¬ÒÔ×èÖ¹ÔÚµ÷ÊÔÀú³ÌÖзºÆðÕÒ²»µ½ÎļþµÄ¹ýʧ¡£
ÓÅ»¯Ñ¡Ïî
ÔÚ±àÒëÓÅ»¯µÄARM»ã±à³ÌÐòʱ£¬¿ÉÒÔʹÓÃÊʵ±µÄÓÅ»¯Ñ¡Ï Èç-O2À´Ìá¸ß³ÌÐòÐÔÄÜ¡£¿ÉÊÇ£¬ÔÚµ÷ÊÔʱӦ¸ÃʹÓÃ-O0À´½ûÓÃÓÅ»¯£¬ÒÔ±ã¸üºÃµØ¸ú×Ù³ÌÐòµÄÖ´ÐС£
ÉèÖ÷ûºÅ±í
ΪÁËÄܹ»ÔÚGDBÖÐ׼ȷÏÔʾԴ´úÂ룬Ӧ¸ÃÔÚ±àÒëʱͨ¹ý-gÑ¡ÏîÌìÉú·ûºÅ±í£¬ÀýÈ磺
arm-linux-gnueabi-gcc -g -o test test.s
µÇ¼ºó¸´ÖÆ
ÕâÑù£¬ÔÚGDBÖоÍÄܹ»×¼È·ÏÔʾԴ´úÂëºÍº¯ÊýÃû¡£
×ܽá
ͨ¹ý±¾ÎÄ£¬ÎÒÃÇÏàʶÁËÔõÑùÔÚLinuxÏÂʹÓÃGDBµ÷ÊÔÓÅ»¯µÄǶÈëʽARM»ã±à³ÌÐò¡£ÔÚµ÷ÊÔÓÅ»¯µÄ³ÌÐòʱ£¬ÎÒÃÇÐèҪעÖØÉèÖÃÑ¡ÏîºÍʹÓõ÷ÊÔÏÂÁî¡£ÕâЩ¼¼ÇÉ¿ÉÒÔ×ÊÖúÎÒÃǸüºÃµØÃ÷È·ºÍµ÷ÊÔÓÅ»¯µÄARM»ã±à³ÌÐò¡£Ï£Íû¶ÁÕßÄܹ»Í¨¹ý±¾ÎÄѧµ½Ò»Ð©ÊÊÓõĵ÷ÊÔ¼¼ÇÉ£¬´Ó¶ø¸üºÃµØ¿ª·¢ºÍµ÷ÊÔARMǶÈëʽϵͳ¡£
ÒÔÉϾÍÊÇLinuxÏÂʹÓÃGDBµ÷ÊÔǶÈëʽARM»ã±àÓÅ»¯µÄ³ÌÐòµÄ³£¼ûÉèÖÃÒªÁìµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡