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

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

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

    先程のはソースが変わってしまっています。まず、その前のソースの時の生成コードを確認したいです。。。

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

    先程のはソースが変わってしまっています。まず、その前のソースの時の生成コードを確認したいです。。。

Children
  • NoMaYさん、うまくいかないので、実際動作しているかと'A'を画面に表示させるようにしたものですが

    前のソースに戻すと、これでやりますと、以下のようになりました。

    RX631スタック領域等を保護するには?-2.txt
    int cmd_test(char *str)
    {
    	int t[5];
    	int i;
    	for(i=0; i<20; i++){
    		t[i]=0;
    		(void)t[i];
    	}
    	return CMD_OK;
    }
    
    
    
    
    
    000017DB                         _cmd_test:
                                     		.STACK	_cmd_test=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",885
    000017DB FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    000017E1 7EAE                    		PUSH.L R14
    000017E3 754E14                  		MOV.L #00000014H, R14
    000017E6                         L1040:	; bb
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",889
    000017E6 601E                    		SUB #01H, R14
    000017E8 21rr                    		BNE L1040
    000017EA                         L1041:	; bb19
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",894
    000017EA EC0E                    		MOV.L [R0], R14
    000017EC 6601                    		MOV.L #00000000H, R1
    000017EE 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    000017F4 18                   S  		BNE L1043
    000017F5                         L1042:	; bb19
    000017F5 6701                    		RTSD #04H
    000017F7                         L1043:	; bb19
    000017F7 04rrrrrr             A  		BRA ___stack_chk_fail
    000017FB                         _cmd_test2:
                                     		.STACK	_cmd_test2=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",896
    000017FB FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    00001801 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",899
    00001803 EC0E                    		MOV.L [R0], R14
    00001805 6601                    		MOV.L #00000000H, R1
    00001807 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    0000180D 18                   S  		BNE L1046
    0000180E                         L1045:	; entry
    0000180E 6701                    		RTSD #04H
    00001810                         L1046:	; entry
    00001810 04rrrrrr             A  		BRA ___stack_chk_fail
    00001814                         _cmd_test3:
                                     		.STACK	_cmd_test3=8
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",901
    00001814 FBE2CCCCADDE            		MOV.L #0DEADCCCCH, R14
    0000181A 7EAE                    		PUSH.L R14
                                     		.LINE  "C:\Dev\BASE\RX63N\RX631\csp\csp\com.c",904
    0000181C EC0E                    		MOV.L [R0], R14
    0000181E 6601                    		MOV.L #00000000H, R1
    00001820 740ECCCCADDE            		CMP #0DEADCCCCH, R14
    00001826 18                   S  		BNE L1049
    00001827                         L1048:	; entry
    00001827 6701                    		RTSD #04H
    00001829                         L1049:	; entry
    00001829 04rrrrrr             A  		BRA ___stack_chk_fail
    

  • MOV.L #00000014H, R14で20を確かにレジスターセットして
    SUB #01H, R14 でデクリメント
    これを見るとなにもしていないのかな、ループしているだけ?

    コンパイラーの最適化が働いているのでしょうか、テストソースを見直してみます。