尊龙凯时人生就是博

LinuxÏÂʹÓÃGDBµ÷ÊÔǶÈëʽARM»ã±à³ÌÐòµÄ³£¼ûÉèÖÃÒªÁì

linuxÏÂʹÓÃgdbµ÷ÊÔǶÈëʽarm»ã±à³ÌÐòµÄ³£¼ûÉèÖÃÒªÁì

ͻ񻣼

ÔÚǶÈëʽϵͳ¿ª·¢ÖÐ £¬ARM¼Ü¹¹µÄ´¦ÀíÆ÷ÆÕ±éÓ¦ÓÃÓÚ¸÷¸öÁìÓò ¡£ÎªÁ˵÷ÊÔǶÈëʽARM»ã±à³ÌÐò £¬ÎÒÃÇ¿ÉÒÔʹÓÃGNUµ÷ÊÔÆ÷£¨GDB£© ¡£±¾ÎĽ«ÏÈÈÝÔÚLinuxÇéÐÎÏÂÉèÖÃGDBÀ´µ÷ÊÔǶÈëʽARM»ã±à³ÌÐòµÄ³£¼ûÒªÁì £¬²¢Ìṩ´úÂëʾÀý ¡£

×°ÖÃGDBºÍARM½»Ö¯±àÒ빤¾ßÁ´

ÔÚ×îÏÈ֮ǰ £¬ÎÒÃÇÐèÒªÔÚLinuxϵͳÉÏ×°ÖÃGDBºÍARM½»Ö¯±àÒ빤¾ßÁ´ ¡£¿ÉÒÔͨ¹ý°ü¹ÜÀíÆ÷£¨Èçapt£©»òÕß´Ó¹Ù·½ÍøÕ¾ÏÂÔؾÙÐÐ×°Öà ¡£

±àдǶÈëʽARM»ã±à³ÌÐò

Ê×ÏÈ £¬ÎÒÃÇÐèÒª±àдһ¸ö¼òÆÓµÄǶÈëʽARM»ã±à³ÌÐò £¬ÒÔ¹©ºóÐøµ÷ÊÔ ¡£ÏÂÃæÊÇÒ»¸öʾÀý³ÌÐò£º

.global _start
.extern printf

.section .data
message: .asciz "Hello, World!
"

.section .text
_start:
    ldr r0, =message
    bl printf

    mov r7, #1
    swi 0

µÇ¼ºó¸´ÖÆ

ÉÏÊö´úÂëÊ×ÏȽç˵ÁËÈ«¾Ö±êºÅ _start ºÍÍⲿº¯Êý printf ¡£È»ºó £¬.data ¶ÎÖнç˵ÁËÒ»¸ö×Ö·û´® message £¬.text ¶ÎÖÐʹÓà ldr ºÍ bl Ö¸ÁîʵÏÖÁË×Ö·û´®µÄÊä³ö ¡£×îºóÁ½ÐдúÂëʹÓà mov ºÍ swi Ö¸ÁîÍ˳ö³ÌÐò ¡£

ʹÓÃARM½»Ö¯±àÒ빤¾ßÁ´¾ÙÐбàÒë

ʹÓÃARM½»Ö¯±àÒ빤¾ßÁ´½«ÉÏÊö»ã±à³ÌÐò±àÒëΪ¿ÉÖ´ÐÐÎļþ ¡£¼ÙÉè½»Ö¯±àÒ빤¾ßÁ´µÄǰ׺Ϊ arm-none-eabi- £¬¿ÉÒÔʹÓÃÒÔÏÂÏÂÁî¾ÙÐбàÒ룺

$ arm-none-eabi-as -mcpu=cortex-m3 -o program.o program.s
$ arm-none-eabi-ld -o program program.o

µÇ¼ºó¸´ÖÆ

ÆäÖÐ £¬-mcpu=cortex-m3 Ö¸¶¨ÁËÄ¿µÄ´¦ÀíÆ÷µÄÀàÐÍ ¡£

ÉèÖÃGDB

½ÓÏÂÀ´ £¬ÎÒÃÇÐèÒªÉèÖÃGDBÀ´µ÷ÊÔ±àÒëÌìÉúµÄ¿ÉÖ´ÐÐÎļþ ¡£¿ÉÒÔʹÓÃÒÔÏÂÏÂÁîÆô¶¯GDB£º

$ gdb

µÇ¼ºó¸´ÖÆ

È»ºó £¬Ê¹ÓÃÒÔÏÂÏÂÁ¿ÉÖ´ÐÐÎļþ¼ÓÔص½GDBÖУº

(gdb) file program

µÇ¼ºó¸´ÖÆ

ÉèÖÃGDBµÄÄ¿µÄ×°±¸

ÎÒÃÇ»¹ÐèÒªÉèÖÃGDBÅþÁ¬µ½Ä¿µÄ×°±¸ £¬ÒÔ±ã¾ÙÐе÷ÊÔ ¡£¿ÉÒÔʹÓÃÒÔÏÂÏÂÁîÉèÖÃÅþÁ¬Æ÷²ÎÊý£º

(gdb) target remote localhost:1234

µÇ¼ºó¸´ÖÆ

ÆäÖÐ £¬localhost:1234 ÊÇÄ¿µÄ×°±¸µÄÅþÁ¬µØµãºÍ¶Ë¿ÚºÅ ¡£ÕâÀï¼ÙÉèʹÓÃÁ˵±ÌïÖ÷»úºÍĬÈ϶˿ںÅ1234 ¡£

µ÷ÊÔ»ã±à³ÌÐò

ÏÖÔÚ £¬ÎÒÃÇ¿ÉÒÔ×îÏȵ÷ÊÔ»ã±à³ÌÐòÁË ¡£ÒÔÏÂÊÇһЩ³£ÓõÄGDBµ÷ÊÔÏÂÁîʾÀý£º

¹Û²ì¼Ä´æÆ÷µÄÖµ£º

(gdb) info registers

µÇ¼ºó¸´ÖÆ

µ¥²½Ö´ÐгÌÐò£º

(gdb) step

µÇ¼ºó¸´ÖÆ

Ö´ÐÐÍêÄ¿½ñº¯ÊýµÄÊ£Óಿ·Ö£º

(gdb) next

µÇ¼ºó¸´ÖÆ

ÉèÖöϵ㣺

(gdb) break main

µÇ¼ºó¸´ÖÆ

¼ÌÐøÖ´ÐгÌÐò£º

(gdb) continue

µÇ¼ºó¸´ÖÆ

Éó²éÄÚ´æÄÚÈÝ£º

(gdb) x/16x $sp

µÇ¼ºó¸´ÖÆ

´òÓ¡±äÁ¿Öµ£º

(gdb) print $r0

µÇ¼ºó¸´ÖÆ

Éó²éÔ´´úÂ룺

(gdb) list

µÇ¼ºó¸´ÖÆ

¿¢Êµ÷ÊԻỰ

µ±ÎÒÃÇÍê³ÉÁ˶ԳÌÐòµÄµ÷ÊÔºó £¬¿ÉÒÔʹÓÃÒÔÏÂÏÂÁʵ÷ÊԻỰ£º

(gdb) quit

µÇ¼ºó¸´ÖÆ

½áÂÛ£º

±¾ÎÄÏÈÈÝÁËÔÚLinuxÇéÐÎÏÂʹÓÃGDBµ÷ÊÔǶÈëʽARM»ã±à³ÌÐòµÄ³£¼ûÉèÖÃÒªÁì ¡£Ê×ÏÈ £¬ÎÒÃÇ×°ÖÃÁËGDBºÍARM½»Ö¯±àÒ빤¾ßÁ´ ¡£È»ºó £¬±àдÁËÒ»¸ö¼òÆÓµÄǶÈëʽARM»ã±à³ÌÐò £¬²¢Ê¹ÓÃARM½»Ö¯±àÒ빤¾ßÁ´¾ÙÐбàÒë ¡£½ÓÏÂÀ´ £¬ÎÒÃÇÉèÖÃÁËGDB²¢ÅþÁ¬µ½Ä¿µÄ×°±¸ ¡£×îºó £¬ÎÒÃÇʹÓÃGDBµÄÖÖÖÖµ÷ÊÔÏÂÁî¶Ô»ã±à³ÌÐò¾ÙÐÐÁ˵÷ÊÔ ¡£Í¨¹ýÉèÖÃGDB £¬ÎÒÃÇ¿ÉÒÔÀû±ãµØµ÷ÊÔǶÈëʽARM»ã±à³ÌÐò £¬¼ÓËÙ¿ª·¢µÄЧÂÊ ¡£

²Î¿¼×ÊÁÏ£º

https://sourceware.org/gdb/onlinedocs/gdb/

https://gcc.gnu.org/onlinedocs/

https://www.keil.com/support/man/docs/armclang_intro/armclang_intro_dom1361289859837.htm

ÒÔÉϾÍÊÇLinuxÏÂʹÓÃGDBµ÷ÊÔǶÈëʽARM»ã±à³ÌÐòµÄ³£¼ûÉèÖÃÒªÁìµÄÏêϸÄÚÈÝ £¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí £¬°æȨÕùÒéÓë±¾Õ¾ÎÞ¹Ø £¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í尊龙凯时人生就是博ÂËÓÍ»úÍø¹Ù·½Ì¬¶È £¬Çë¶ÁÕß½ö×ö²Î¿¼ ¡£±¾ÎĽӴýתÔØ £¬×ªÔØÇë˵Ã÷À´ÓÉ ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢ £¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢ £¬ÇëÄúÁ¬Ã¦ÁªÏµ尊龙凯时人生就是博ʵʱÐÞÕý»òɾ³ý ¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ尊龙凯时人生就是博

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎå £¬9:30-18:30 £¬½ÚãåÈÕÐÝÏ¢

QR code
sitemap¡¢ÍøÕ¾µØͼ