- ベストアンサー
メモリのアドレスからの値の取得のしかた
c言語でメモリのアドレスから値を取得するには、どういうプログラムにしたらいいですか? 例えば、0x1f00から0x2000までの値を取得するには、具体的にどうプログラムしますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
仮想記憶のないマイコンで動くと仮定して、 unsigned char *mem; mem = (unsigned char *)0x0000; for( i=0x1f00 ; i<0x2000 ; i++ ) { unsigned char a; a = mem[i]; <何らかの処理> } で処理出来る場合が多いとは思いますが、コンパイラと実行環境によっては不可です。
その他の回答 (2)
- sha-girl
- ベストアンサー率52% (430/816)
もしWindowsやLinuxでやろうとしているのなら C言語の仕組みのみでは無理です。 malloc等で返る値は、仮想メモリ空間のアドレスだからです。 (アプリケーションは物理アドレスに直接アクセスできません) MSからWindowsの物理アドレスを直接見るツール自体は提供されていますから アクセスする方法はあると思います。 多分デバイスレベルだと思いますので、DDK等が必要かもしれません。
- jacta
- ベストアンサー率26% (845/3158)
一般的な方法はありません。 比較的よく使われる方法としては、 const char *addr = 0x1f00; char buf[0x2000 - 0x1f00]; memcpy(buf, addr, sizeof buf); のようにしますが、期待通りに動作するかどうかは、完全に環境に依存します。 ちなみに、任意のアドレスをポインタ型にキャストした場合の動作は(少なくとも規格上は)未定義です。 動作が定義されているのは、ポインタをいったん整数型にキャストし、再び元のポインタ型に戻した場合で、整数型がポインタの値を格納するのに十分な大きさである場合だけです。