RX631スタック領域等を保護するには?

IKUZOと申します、お伺いしたいのですが、
RX631でスタック領域を保護したいのですが、
MPUを使用するのでしょうか?
特権命令例外を使用するのでしょうか?
スタック領域というのは保護可能なんでしょうか?
スタック領域というのは簡単に壊すことができるので、
保護することができれば、安全ではないかと

Parents
  •  IKUZOさん、こんにちは。NoMaYです。

    >__stack_chk_fail関数を利用しようとするのですが、動作できないみたいです
    >。。。
    >何が原因であるのか、アドバイスいただけないでしょうか?
    コンパイラのリストファイルでは、cmd_test()に対して、どういうコードが生成されているでしょうか?
    (RTSの1命令だけだったりするかも、、、)

  • NoMaYさんいつもアドバイスありがとうございます、違反部分のソースコードになります

    int cmd_test(char *str)

    {

    int t[5];

    int i;

    for(i=0; i<20; i++){

    t[i]='A';

    printf("%c\r",t[i]);

    }

    return CMD_OK;

    }

    コンパイラーのその部分のリストです

    RX631スタック領域等を保護するには?.txt
    000017DB                         _cmd_test:
                                     		.STACK	_cmd_test=24
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",871
    000017DB 6E67                    		PUSHM R6-R7
    000017DD FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    000017E3 7EAE                    		PUSH.L R14
    000017E5 754614                  		MOV.L #00000014H, R6
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",877
    000017E8 FB72rrrrrrrr            		MOV.L #_L87, R7
    000017EE                         L1040:	; bb
    000017EE 6080                    		SUB #08H, R0
    000017F0 E307                    		MOV.L R7, [R0]
    000017F2 3E0141                  		MOV.L #00000041H, 04H[R0]
    000017F5 05rrrrrr             A  		BSR _printf
    000017F9 6280                    		ADD #08H, R0
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",875
    000017FB 6016                    		SUB #01H, R6
    000017FD 21rr                    		BNE L1040
    000017FF                         L1041:	; bb21
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",880
    000017FF EC0E                    		MOV.L [R0], R14
    00001801 6601                    		MOV.L #00000000H, R1
    00001803 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    00001809 18                   S  		BNE L1043
    0000180A                         L1042:	; bb21
    0000180A 3F6703                  		RTSD #0CH, R6-R7
    0000180D                         L1043:	; bb21
    0000180D 04rrrrrr             A  		BRA ___stack_chk_fail
    00001811                         _cmd_test2:
                                     		.STACK	_cmd_test2=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",883
    00001811 FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    00001817 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",886
    00001819 EC0E                    		MOV.L [R0], R14
    0000181B 6601                    		MOV.L #00000000H, R1
    0000181D 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    00001823 18                   S  		BNE L1046
    00001824                         L1045:	; entry
    00001824 6701                    		RTSD #04H
    00001826                         L1046:	; entry
    00001826 04rrrrrr             A  		BRA ___stack_chk_fail
    0000182A                         _cmd_test3:
                                     		.STACK	_cmd_test3=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",888
    0000182A FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    00001830 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",891
    00001832 EC0E                    		MOV.L [R0], R14
    00001834 6601                    		MOV.L #00000000H, R1
    00001836 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    0000183C 18                   S  		BNE L1049
    0000183D                         L1048:	; entry
    0000183D 6701                    		RTSD #04H
    0000183F                         L1049:	; entry
    0000183F 04rrrrrr             A  		BRA ___stack_chk_fail
    00001843                         _rtc_init:
                                     		.STACK	_rtc_init=12
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",61
    00001843 7EA6                    		PUSH.L R6
    00001845 FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    0000184B 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",64
    0000184D FB6E22C408              		MOV.L #0008C422H, R6
    00001852 F16806                  		BCLR #00H, 06H[R6].B
    00001855 FBEEFE0308              		MOV.L #000803FEH, R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",66
    0000185A F8E90BA5                		MOV.W #0A50BH, [R14]
    0000185E FBFE330008              		MOV.L #00080033H, R15
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",67
    00001863 F0F0                    		BSET #00H, [R15].B
    00001865                         L1051:	; bb1
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",68
    00001865 F4F0                    		BTST #00H, [R15].B
    00001867 20rr                    		BEQ L1051
    00001869                         L1052:	; bb7

Reply
  • NoMaYさんいつもアドバイスありがとうございます、違反部分のソースコードになります

    int cmd_test(char *str)

    {

    int t[5];

    int i;

    for(i=0; i<20; i++){

    t[i]='A';

    printf("%c\r",t[i]);

    }

    return CMD_OK;

    }

    コンパイラーのその部分のリストです

    RX631スタック領域等を保護するには?.txt
    000017DB                         _cmd_test:
                                     		.STACK	_cmd_test=24
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",871
    000017DB 6E67                    		PUSHM R6-R7
    000017DD FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    000017E3 7EAE                    		PUSH.L R14
    000017E5 754614                  		MOV.L #00000014H, R6
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",877
    000017E8 FB72rrrrrrrr            		MOV.L #_L87, R7
    000017EE                         L1040:	; bb
    000017EE 6080                    		SUB #08H, R0
    000017F0 E307                    		MOV.L R7, [R0]
    000017F2 3E0141                  		MOV.L #00000041H, 04H[R0]
    000017F5 05rrrrrr             A  		BSR _printf
    000017F9 6280                    		ADD #08H, R0
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",875
    000017FB 6016                    		SUB #01H, R6
    000017FD 21rr                    		BNE L1040
    000017FF                         L1041:	; bb21
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",880
    000017FF EC0E                    		MOV.L [R0], R14
    00001801 6601                    		MOV.L #00000000H, R1
    00001803 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    00001809 18                   S  		BNE L1043
    0000180A                         L1042:	; bb21
    0000180A 3F6703                  		RTSD #0CH, R6-R7
    0000180D                         L1043:	; bb21
    0000180D 04rrrrrr             A  		BRA ___stack_chk_fail
    00001811                         _cmd_test2:
                                     		.STACK	_cmd_test2=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",883
    00001811 FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    00001817 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",886
    00001819 EC0E                    		MOV.L [R0], R14
    0000181B 6601                    		MOV.L #00000000H, R1
    0000181D 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    00001823 18                   S  		BNE L1046
    00001824                         L1045:	; entry
    00001824 6701                    		RTSD #04H
    00001826                         L1046:	; entry
    00001826 04rrrrrr             A  		BRA ___stack_chk_fail
    0000182A                         _cmd_test3:
                                     		.STACK	_cmd_test3=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",888
    0000182A FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    00001830 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",891
    00001832 EC0E                    		MOV.L [R0], R14
    00001834 6601                    		MOV.L #00000000H, R1
    00001836 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    0000183C 18                   S  		BNE L1049
    0000183D                         L1048:	; entry
    0000183D 6701                    		RTSD #04H
    0000183F                         L1049:	; entry
    0000183F 04rrrrrr             A  		BRA ___stack_chk_fail
    00001843                         _rtc_init:
                                     		.STACK	_rtc_init=12
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",61
    00001843 7EA6                    		PUSH.L R6
    00001845 FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    0000184B 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",64
    0000184D FB6E22C408              		MOV.L #0008C422H, R6
    00001852 F16806                  		BCLR #00H, 06H[R6].B
    00001855 FBEEFE0308              		MOV.L #000803FEH, R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",66
    0000185A F8E90BA5                		MOV.W #0A50BH, [R14]
    0000185E FBFE330008              		MOV.L #00080033H, R15
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",67
    00001863 F0F0                    		BSET #00H, [R15].B
    00001865                         L1051:	; bb1
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\rtc.c",68
    00001865 F4F0                    		BTST #00H, [R15].B
    00001867 20rr                    		BEQ L1051
    00001869                         L1052:	; bb7

Children
No Data