プロが教える店舗&オフィスのセキュリティ対策術

c言語でメモリのアドレスから値を取得するには、どういうプログラムにしたらいいですか?
例えば、0x1f00から0x2000までの値を取得するには、具体的にどうプログラムしますか?

A 回答 (3件)

仮想記憶のないマイコンで動くと仮定して、


unsigned char *mem;
mem = (unsigned char *)0x0000;
for( i=0x1f00 ; i<0x2000 ; i++ ) {
unsigned char a;
a = mem[i];
<何らかの処理>
}
で処理出来る場合が多いとは思いますが、コンパイラと実行環境によっては不可です。
    • good
    • 0

もしWindowsやLinuxでやろうとしているのなら


C言語の仕組みのみでは無理です。
malloc等で返る値は、仮想メモリ空間のアドレスだからです。
(アプリケーションは物理アドレスに直接アクセスできません)

MSからWindowsの物理アドレスを直接見るツール自体は提供されていますから
アクセスする方法はあると思います。
多分デバイスレベルだと思いますので、DDK等が必要かもしれません。
    • good
    • 0

一般的な方法はありません。


比較的よく使われる方法としては、

const char *addr = 0x1f00;
char buf[0x2000 - 0x1f00];
memcpy(buf, addr, sizeof buf);

のようにしますが、期待通りに動作するかどうかは、完全に環境に依存します。

ちなみに、任意のアドレスをポインタ型にキャストした場合の動作は(少なくとも規格上は)未定義です。
動作が定義されているのは、ポインタをいったん整数型にキャストし、再び元のポインタ型に戻した場合で、整数型がポインタの値を格納するのに十分な大きさである場合だけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています