| ²é¿´: 522 | »Ø¸´: 0 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
sdlj8051½ð³æ (ÖøÃûдÊÖ)
|
[½»Á÷]
[תÌù]ARMоƬÏê½â
|
||
|
ARMоƬÏê½â ×÷Õߣº²»Ïê ·Ò룺nbw ÒëÕß×¢£ºÕâÆªÎÄÕÂÖ÷Òª½éÉÜÁËRisc½á¹¹µÄPDAоƬ×é³ÉºÍ»ã±à³ÌÐò£¬·Òë²»ÖÜ£¬¿Ï¶¨ÓдíÎó£¬Çë¶à°üº£¬ÁíÍâÎÒÍü¼ÇÁ˳ö´¦£¬ÕâÀïÏò×÷Õß±íʾǸÒâ¡£ RISC´¦ÀíÆ÷±»¹ã·ºÓ¦ÓÃÔÚСÐÍÉ豸ÉÏ£¬ÀýÈçPDA£¬Òƶ¯µç»°£¬ÖÇÄÜÈÈË®Æ÷µÈ¡£ÓÐºÜ¶à¹ØÓÚRISC´¦ÀíÆ÷µÄ»ã±à³ÌÐò£¬µ«×î³£¼ûµÄ»¹ÊÇARM¡£ ÏÂÃæÎÒҪ̸µÄÊÇARM 7£¬ÒòΪÎÒÑо¿µÄÊÇÕâ¸ö¡£ ÈÃÎÒÃÇÏÈÁ˽âÒ»ÏÂARMµÄ¼Ü¹¹¡£ARM´¦ÀíÆ÷°üº¬37¸ö¼Ä´æÆ÷£º31¸öͨÓõÄ32λ¼Ä´æÆ÷£¬ÒÔ¼°6¸ö״̬¼Ä´æÆ÷¡£¼Ä´æÆ÷µÄÉèÖÃÈ¡¾öÓÚ´¦ÀíÆ÷״̬¡£ARM״ִ̬ÐÐ32λָÁThumb״ִ̬ÐÐ16λָÁ¡£ ÔÚARM״̬£¬ÓÐ18¸ö¼Ä´æÆ÷¿ÉÓ㺿ɹ©Ö±½Ó´æ´¢µÄR0¡ªR15£¬CPSR£¨µ±Ç°³ÌÐò״̬¼Ä´æÆ÷£©£¬SPSR£¨±»´æ´¢³ÌÐò״̬£©¡£ÆäÖÐ3¸ö¿ÉÖ±½Ó´æ´¢Æ÷±»³ÆÎª·þÎñ¼Ä´æÆ÷¡£ £¨R13£©SP ¨D¨D¶ÑÕ»Ö¸Õë £¨£Ò14£©LR¨D¨DÁ¬½Ó¼Ä´æÆ÷£¬ÓÃÀ´´æ´¢µ÷Óùý³ÌµÄº¯ÊýµØÖ·£¨Òë×¢£º¿É¼òµ¥Àí½âΪ¹ý³Ì·µ»ØµØÖ·£©¡£²¢ÇÒ£¬£Ì£Ò²¢·Ç´æ´¢ÔÚ¶ÑÕ»ÖУËü´æÔÚÓڼĴæÆ÷ÖС£ £¨£Ò15£©PC¨D¨Dµ±Ç°Ö¸ÁîÖ¸Õë¡£ÓÃÒ»°ãµÄ£í£ï£öÖ¸Áî¾Í¿ÉÒԸıäËüµÄÖµ£¬´Ó¶øÖ´ÐÐËüËùÖ¸ÏòµÄÃüÁî¡£ ÔÚThumb ״̬£¬ÓÐ13¸ö¼Ä´æÆ÷¿ÉÓãºR0-R8, R13-R15, CPSR, SPSR ״̬µÄ¸Ä±ä£¬²»»áÓ°Ïì¼Ä´æÆ÷ÄÚÈݵı仯¡£ Èç¹ûÏë½øÈëThumb״̬£¬¿ÉÒÔÏȽ«²Ù×÷¼Ä´æÆ÷µÄ״̬λÉèΪ£±£¨bit 1£©£¬È»ºóÖ´ÐÐBXÖ¸Áî¡£Èç¹ûÏë½øÈëARM £¨Òë×¢£ºÔÎÄÎóΪAPM£©×´Ì¬£¬¿ÉÒÔÏȽ«²Ù×÷¼Ä´æÆ÷µÄ״̬λÉèΪ£°£¨bit 0£©£¬È»ºóÖ´ÐÐBXÖ¸Áî¡£ £²ÖÖ״̬µÄÖ¸ÁÊDz»Í¬µÄ£¬µ«ÊǺܶàÖ¸Áî¶¼ÊÇÀàËÆµÄ¡£ThumbÖ¸Á³¤¶ÈΪ£²bytes£¬ARM£4bytes¡£¹ØÓÚ£²ÖÖ״ָ̬ÁîµÄ¾ßÌå×ÊÁÏ¿ÉÒԲο¼£º http://www.atmel.com/dyn/resources/prod_documents/doc0673.pdf ÓÐȤµÄÊǺܶàÖ¸Áî¿ÉÒÔͬʱ²Ù×÷¶à¸ö¼Ä´æÆ÷¡£ÀýÈ磺 ADD R3, SP, #4 Ï൱ÓÚ£º¡¡R3:=SP+4 »òÕߣ¬ÓÃÀ´´æ´¢¼Ä´æÆ÷ÈëÕ»µÄÖ¸Á PUSH {R2-R4, R7, LR} ¡¡ÕâºÍx86»ã±àÀïÃæµÄpushadÖ¸Áͬ£¬ÔÚARM»ã±àÀïÃæ£¬ÕâÖÖ½«¼Ä´æÆ÷´æÈë¶ÑÕ»µÄ·½Ê½ÊÇ¿ÉÐеġ£ ÄÚ´æÖУ¬Êý¾Ý´æ´¢·½Ê½¿ÉÒÔÊǵÍλ´æ´¢£¨ÀýÈçIntel¼Ä´æÆ÷£©»òÕ߸ßλ´æ´¢£¨ÀýÈçMotorola¼Ä´æÆ÷£©¡£ËùÒÔ£¬Ð´´úÂëʱºò£¬ÓбØÒªÖ¸Ã÷Êý¾Ý´æ·Å·½Ê½¡£ ÏÂÃæÊÇһЩ£Á£Ò£Í±àÒëÆ÷µÄ×ÊÁÏ£º http://heanet.dl.sourceforge.net ... e/gnude-arm-win.exe - GNU compiler with all consequences - all through command line + debugging through gdb. http://www.goldroad.co.uk/grARM.html - unpretentious ARM assembler. http://www.arm.com/support/downloads/index.html - official tools for ARM¡¯s develpment. Here you can only buy them. http://www.iar.com/ - alternative to IDA for ARM. 30-day's trial version is offered. ÏÂÃæ½²½âÒ»ÏÂÓɣã«£«µÄ£Á£Ò£Í±àÒëÆ÷Éú³ÉµÄ£Á£Ò£Í»ã±à³ÌÐò¡£ Ò»°ãµØ£¬·ÖÎö²»Í¬³ÌÐòµÄʱºò£¬¾³£Åöµ½µÄ²¢²»ÊÇ´¿´âµÄ»ã±àÓïÑÔ£¬¶øÊÇÓɣã«£«±àÒëÆ÷Éú³ÉµÄ´úÂë¡£µ±È»£¬x86»ã±à³ÌÐòÔ±Ò»°ã²»»áÈç´Ë¡£ º¯Êýµ÷Ó㺠ÕâÀï²»´æÔÚº¯Êý²ÎÊýµ÷ÓÃÔ¼¶¨£¨ÀýÈçcdecl£¬stdcall µÈ£©£¡ËùÓеĺ¯Êýµ÷ÓÃÔ¼¶¨ÀàËÆÓÚBorlandµÄfastcall¡£²ÎÊýÓɼĴæÆ÷´«È룬Èç¹ûÊýÄ¿²»¹»£¬ÓɶÑÕ»´«Èë¡£ ÀýÈ磺 ROM:0001F4E2 MOV R0, SP ROM:0001F4E4 MOV R2, *6 ROM:0001F4E6 ADD R1, R4, *0 ROM:0001F4E8 BL memcmp ²ÎÊýµÄ´«µÝ˳Ðò¶ÔÓ¦ÓڼĴæÆ÷±àºÅ£¬£Ò£°ÎªµÚÒ»¸ö£¬£Ò£±ÎªµÚ¶þ¸ö£¬£Ò£²ÎªµÚÈý¸ö£¨Òë×¢£º±È½ÏÓÐÒâ˼£©¡£Ï൱ÓÚ£º int memcmp ( const void *buf1, const void *buf2, size_t count ); buf1 = R0 buf2 = R1 count = R2 º¯Êý·µ»ØÖµ±»´æ·ÅÔÚ£Ò£°ÖУº ROM:0001F4E2 MOV R0, SP ROM:0001F4E4 MOV R2, *6 ROM:0001F4E6 ADD R1, R4, *0 ROM:0001F4E8 BL memcmp ROM:0001F4EC CMP R0, *0 ROM:0001F4EE BNE loc_1F4F4 ÏÂÃæÊÇÒ»¸öÀûÓöÑÕ»´«µÝ²ÎÊýµÄÀý×Ó£º ROM:000BCDEC MOV R2, *0 ROM:000BCDEE STR R2, [SP] ROM:000BCDF0 MOV R2, *128 ROM:000BCDF2 MOV R3, *128 ROM:000BCDF4 MOV R1, *14 ROM:000BCDF6 MOV R0, *0 ROM:000BCDF8 BL FillBoxColor ÉÏÃæ£¬£Ò£°££Ò£³´æ´¢×ø±ê£¬µÚ£µ¸ö²ÎÊý£¨É«²Ê£©±»´æ·ÅÔÚ¶ÑÕ»ÖС£ Ö»ÓÐͨ¹ý·ÖÎö²Å¿ÉÒÔÈ·¶¨²Ù×÷ÊýµÄÊýÄ¿¡£ÎÒÃÇ¿ÉÒÔ·ÖÎöº¯ÊýºÍËüµÄµ÷Óò¿·Ö¡£ÓÐʱºò£¬²ÎÊýÐÅÏ¢¿ÉÒÔͨ¹ý¶Ô¼Ä´æÆ÷ºÍ¶ÑÕ»µÄ²Ù×÷¹Û²ì³öÀ´¡£ÀýÈ磬ÔÚThumb״̬Ï£¬³ÌÐò¶Ô£Ò£°££Ò£·ºÍ·þÎñ¼Ä´æÆ÷µÄ²Ù×÷¡£ËùÒÔ£¬Èç¹û¿´µ½ÀàËÆÓÚÏÂÃæµÄ´úÂ룺 ROM:00059ADA getTextBounds ROM:00059ADA PUSH {R4-R7, LR}, ¿ÉÒÔÈÏΪËüµÄ²ÎÊý±»´æ·ÅÔÚ£Ò£°£¬£Ò£±£¬£Ò£²£¬£Ò£³ºÍ£Ó£Ð¡£Èç¹û¼ûµ½£º ROM:0005924E ADD R0, SP, *0x14 ROM:00059250 ADD R1, SP, *0x6C ROM:00059252 ADD R2, SP, *0x68 ROM:00059254 ADD R3, SP, *0x64 ROM:00059256 BL getTextBounds ÎÒÃÇ¿´µ½Ö»ÓУң°££Ò£³±»Ê¹Ó㬾ÍÊÇ˵ֻÓУ´¸ö²ÎÊý±»´«µÝ¹ýÀ´¡£ ×ªÒÆ£¨Transitions £© Ò»°ã£¬×ªÒÆ·ÖΪÌõ¼þ×ªÒÆºÍÎÞÌõ¼þ×ªÒÆ¡£×ªÒÆÄ¿±ê¿ÉÒÔ´æ·ÅÔڼĴæÆ÷»òÕ߯äËû´¦¡£¼Ä´æÆ÷×ªÒÆÒ»°ãÓÃÓÚThumb/ARM ״̬ת»»¡£ÎÞÌõ¼þ¶Ì×ªÒÆÖ¸ÁîΪ£Â£¨branch£©ÃüÁî¡£³¤Ìø×ªÖ¸Áî£BX£¨½»»»×ªÒÆ£©¡£º¯Êýµ÷ÓòÉÓÃBL£¨Á¬½Ó×ªÒÆ£©£¬ÇÒµ÷ÓÃʱ½«·µ»ØµØÖ·´æÈë£Ì£Ò¼Ä´æÆ÷¡£µ±È»£¬¸Ä±ä£Ð£Ã¼Ä´æÆ÷ÄÚÈÝÒ²¿ÉÒԸıä×ªÒÆµØÖ·£º ADD PC, *0x64 µ«ÊǣñàÒëÆ÷ͨ³£²»ÕâÑù´¦Àí£¬ËüÃÇÔÚ×ªÒÆµÄʱºò£¬Ö»ÊÇÒÔдÈëÃüÁî¸Ä±ä£Ð£Ã¼Ä´æÆ÷¡£ ·ÖÖ§£¨Branches£© Ò²³ÆÎª×ª»»£¬Ò»°ãÓ÷¨ÈçÏ£º ROM:0027806E CMP R2, *0x4D; 'M' ROM:00278070 BCS loc_27807A ROM:00278072 ADR R3, word_27807C ROM:00278074 ADD R3, R3, R2 ROM:00278076 LDRH R3, [R3, R2] ROM:00278078 ADD PC, R3 ROM:0027807 A ROM:0027807 A loc_27807A ROM:0027807 A B loc_278766 ROM:0027807 C word_27807C DCW 0xAA, 0xBE, 0xC6, 0x180, 0x186; 0 ROM:0027807 C DCW 0x190, 0x1A0, 0x1A8, 0x1DE, 0x1E4; 5 ROM:0027807 C DCW 0x1B0, 0x212, 0x276, 0x1FE, 0x294; 10 Ê×ÏÈ£¬¼ì²éÌø×ª±ê¼Ç£¬¸Ã±ê¼Ç±ØÐëСÓÚ0x40£¬Èç¹û´óÓÚ£¬ÔòÌøµ½Ä¬ÈÏ´¦ÀíλÖ㬼´£ºloc_27807A¡£ È»ºóÖ´ÐÐλÓÚword_27807C µÄ×ªÒÆ¿ØÖÆ±í¡£Õâ¸ö±íÀïÃæ´æ·ÅµÄÊÇÆ«ÒÆ£¬²¢·ÇµØÖ·¡£Ëæºó£¬¸ù¾ÝÌø×ª±ê¼Ç£¬È¡±íÖÐµÄÆ«ÒÆ£¬À©Õ¹Ö®£¬¼Ó²Ù×÷·ÅÈë£Ð£Ã¼Ä´æÆ÷¡£±ÈÈ磬Èç¹ûÌø×ª±ê¼ÇΪ£°£¬½«»áÌø×ªµ½µØÖ·£º 0x278078 (current value PC) +0xAA (offset from the table) + 0x4 (!!!) = 0x278126 Ö®ËùÒÔ¼Ó£´£¬ÊÇÒòΪ£Á£Ò£Í´¦ÀíÆ÷µÄÌØÕ÷£º²Ù×÷£Ð£Ã¼Ä´æÆ÷ʱ£¬ÆäÖµÓ¦¸Ã±ÈÔ¤ÏÈÈ·¶¨µÄÊýÖµ´ó£´£¨ÔÚÎĵµ¡°to ensure it is word aligned ¡±ÖÐÓÐ˵Ã÷£©¡£ ÄÚ´æ´æÈ¡ ÔÚThumb״̬£¬´¦ÀíÆ÷¿ÉÒÔ´æÈ¡+/-256 ×ֽڵĿռ䡣Òò´Ë£¬ÎÞ·¨Ö±½Ó´æÈ¡Äڴ棬¶øÐèÒªÀûÓüĴæÆ÷À´Òýµ¼¡£Ò²¾ÍÊÇÎÞ·¨Ö±½Ó¶¨Î»µ½0x974170£¬¶øÐèÒª²ÉÓüĴæÆ÷¡£ÀýÈ磺 ROM:00277FF6 LDR R0, =unk_974170 ROM:00277FF8 LDR R0, [R0] ÎÒÃÇ»ñµÃÁË0x974170´¦µÄÊý¾Ý£¬µ«ÊÇÊÂÇ黹ûÓнáÊø£¡¸ÃÓÐЧµØÖ·£¨0x974170£©´¦ÓÚÓÐЧµÄÕý¸º256 ×Ö½ÚÖУº ROM:00278044 off_278044 DCD unk_974170 ÕâÑù£¬¾ÍÊÇ˵£¬LDRÖ¸ÁîµÄ»úÆ÷ÂëÖд洢Á˸ÃÃüÁǰµÄµØÖ·¡££¨Òë×¢£º¾ÍÊÇ˵0x974170ËäÈ»¿´ÆðÀ´±È½Ï´ó£¬Êµ¼ÊÉÏ»¹ÊÇÄÇ+-256×Ö½ÚÄÚ£¬Ö»²»¹ýͨ¹ýLDRÖ¸ÁîÀ´¶¨Î»£© ÕâÀï´æÔÚÒ»¸öºÜÒÕÊõµÄÓÅ»¯·½·¨£ºÈç¹ûÒ»¸öµØÖ·ºÍ¸Ãº¯ÊýÖÐÁíÍâÒ»¸ö±»Óõ½µÄµØÖ·ÓйØÁª£¬ÄÇôÕâ¸öµØÖ·¿ÉÒÔͨ¹ýËãÊõÔËËãÖ¸Áî»òÕß¼ä½Ó´æÈ¡À´»ñÈ¡¡£¾ÙÀýÀ´Ëµ£¬Èç¹ûÒ»¸öº¯ÊýÐèÒªÓõ½0x100000´¦µÄ±äÁ¿£¬²¢ÇÒÐèÒªÓõ½0x100150´¦µÄÁíÍâÒ»¸ö±äÁ¿£¬ÄÇô£¬±àÒëÆ÷¿ÉÒÔ½«Õâ2¸ö±äÁ¿½¨Á¢¹ØÁª£¬»òÕß²ÉÓÃÒÔÏ´úÂ룺 LDR R0, =0x100000 ADD R0, *0xFF ADD R0, *0x51 LDR R0, [R0] ÔÚx86ÀïÃæ£¬ÕâÖÖ·½·¨Ó¦ÓÃÓڽṹÖлñÈ¡×ӽṹ½Ó¿Ú¡£µ«ÊÇ´Ë´¦£¬È´ÊÇÒ»¸ö³£ÓõÄÓÅ»¯£¬ÕâÓÐʲôºÃ´¦ÄØ£¿¿ÉÒÔ¼õСÄÚ´æ´æ´¢£¬²¢ÇÒËãÊõÔËËã±ÈÊý¾Ý¼ÓÔØ¿ìµÃ¶à¡£¿ÉÒÔÈÏΪÕû¸öARM»ã±à³ÌÐò³äÂúÁ˲»Í¬µÄ¼Ä´æÆ÷¼äËãÊõÔËËã¡£ÊÂʵÉÏ£¬Óжà´ï16¸ö¼Ä´æÆ÷ÓÃÀ´½øÐд˲Ù×÷£¼õÉÙÄÚ´æºÍ¶ÑÕ»¶¨Î»Æµ¶È¡£Òò´Ë£¬Ö»ÓÐÔڷdz£´óµÄº¯ÊýÖвÅÐèÒªÓöÑÕ»´æ´¢±äÁ¿¡£¶Ô¶ÑÕ»µÄ²Ù×÷ºÍx86´¦Àí¶ÑÕ»µÄ·½Ê½Ò»Ñù¡£ £É£Ä£ÁÖеĴúÂë·ÖÎö ¼ÈÈ»£Á£Ò£ÍÎļþûÓÐͳһ¸ñʽ£¬ÄÇôÔÚ¼ÓÔØ£Á£Ò£Í¶þ½øÖÆÓ³ÏñµÄʱºò£¬ÓбØÒªÏȼÓÔØ¸ÃÎļþ¡£ÔÚ¼ÓÔØµÄʱºò£¬ÐèҪȷ¶¨´¦ÀíÆ÷ÀàÐÍ¡£Èç¹û´¦ÀíÆ÷¹æ¶¨´úÂë±ØÐë°´ÕÕ´¦ÀíÆ÷Ä£¿é´¦Àí˳Ðò£¬ÄÇôÄã¿ÉÒÔ¼ÓÔØÓ³ÏñÎļþ²¢ÇÒÖ¸¶¨ÐèÒªµÄ´¦Àí·½Ê½£¬£Á£Ò£Í´¦Àí·½Ê½£¨µÍλ´¦Àí£©»òÕߣÁ£Ò£Í£Â£¨¸ßλ´¦Àí£©¡£²¢ÇÒ£¬ÓбØÒª½¨Á¢£Ò£Ï£Í»òÕߣңÁ£Í¶Î¡£×Ü֮ûÓй̶¨µÄ´¦Àí·½Ê½£¬¾ßÌåµÄ´¦ÀíÓÐÀµÓÚÓ³ÏñºÍÿ¸ö£Á£Ò£Í´¦ÀíÆ÷µÄ¼Ü¹¹¡£ÀýÈ磬ÔÚ£Á£Ò£Í£·ÖУ¬ÄÚ´æÒ»°ãÓÐÈçϸñʽ£º 0x0 - 0x8000 of RAM processor 0x8000 - 0x1000000 ROM 0x1000000 - 0x..... - SRAM £¨ÕâÀï¿´³ö×ÔÉíÊýÄ¿£© ÏÖÔھͿÉÒÔ·ÖÎö´úÂëÁË£¬ÔںܶàÉ豸ÖУ¨Ò»°ã¶¼ÊÇÒÆ¶¯µç»°£©£¬´úÂëµÄÈë¿ÚÉ趨Ϊ0x8000¡££Á£Ò£ÍģʽϵĴúÂë´Ó0x8000¿ªÊ¼Ö´ÐУ¬ËùÒÔ£¬¿ªÊ¼Ö´ÐеÄÖ¸ÁîºÍ¸Ã´¦µÄÒ»Ñù¡£´¦ÀíÆ÷µÄ£É£Ä£ÁÄ£¿é¿ÉÒÔ¼òµ¥µØ·ÖÎö´ËÀàswitchingÓï¾ä£¬È»ºóThumb ´úÂëÔÚ£Á£Ò£ÍÖÐÖ´ÐС£Èç¹ûÊÖ¹¤ÐÞ¸ÄÌø×ª£¬¿ÉÒÔ°´ALT-G£¬È»ºóÐÞ¸ÄÎļþÖеıê¼Ç£¬Èç¹ûΪ£Á£Ò£ÍÎļþ£¬ÉèΪ£°£¬ThumbÎļþ£¬ÉèΪ£±¡£ [ Last edited by sdlj8051 on 2006-10-6 at 13:25 ] |
» ²ÂÄãϲ»¶
»¯¹¤Ñ§Ë¶294·Ö£¬Çóµ¼Ê¦ÊÕÁô
ÒѾÓÐ29È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ10È˻ظ´
¿¼ÑÐÇóµ÷¼Á
ÒѾÓÐ13È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
È˹¤ÖÇÄÜ320µ÷¼Á08¹¤À໹Óлú»áÂð
ÒѾÓÐ17È˻ظ´
¿¼ÑÐÓ¢Ò»ÊýÒ»338·Ö
ÒѾÓÐ10È˻ظ´
ÇóÖúµ÷¼Á£¬¿çµ÷
ÒѾÓÐ15È˻ظ´
085600²ÄÁÏÓ뻯¹¤329·ÖÇóµ÷¼Á
ÒѾÓÐ20È˻ظ´
085600²ÄÁÏÓ뻯¹¤349·ÖÇóµ÷¼Á
ÒѾÓÐ15È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ13È˻ظ´














»Ø¸´´ËÂ¥