C と ARM で自己修正コードを書こうとしています。以前、MIPS について同様の質問をしましたが、現在、プロジェクトを ARM に移植しようとしています。
私のシステム:=ラズベリーパイ、ARMv6、GCCのラズビアン
私が確信していないことがいくつかあります:
- ARM は D キャッシュのライトバック/I キャッシュの無効化 (キャッシュ フラッシュ) を必要としますか? もしそうなら、どうすればこれを行うことができますか?
また、私は例を試しました
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
int inc(int x){ //increments x
uint16_t *ret = malloc(2 * sizeof(uint16_t));
*(ret + 0) = 0x3001; //add r0 1 := r0 += 1
*(ret + 1) = 0x4770; //bx lr := jump back to inc()
int(*f)(int) = (int (*)(int)) ret;
return (*f)(x);
}
int main(){
printf("%d",inc(6)); //expect '7' to be printed
exit(0);}
しかし、セグメンテーション違反が発生し続けます。私はaapcs呼び出し規約を使用しています.これは、すべてのARMのデフォルトであることを理解するために与えられました.
誰かが私を正しい方向に向けてくれたなら、私はとても感謝しています
おまけの質問 (つまり、実際に答える必要はありませんが、知っておくと便利です) - 私は「MIPS のバックグラウンドから来ました」。(値 0 にハードコードされたレジスタのように)