直接、アドレスに何かしたい!
C言語でハードウエア寄りのプログラムを行う時
直接アドレスを操作する場合がある。
例えば指定アドレスにステータスが現れる場合など
昔やったよな~。
そんな時、どうやったかな~。
などと思いだしたのでやってみた。
確かこんな感じでもコンバートが通ったと思うのだが
もしかしたら勘違いかもしれない。
char*string="test";
0x00401020(string);
いや、多分勘違いしていると思う。
無論、今ならエラーです。
じゃあ今ならどう書くか?
キャストすると何でも出来るんですね。(笑)
今更ながら再確認。
#include<stdio.h>
#define putout_address ((void(*)(char*))0x00401020)
#define putout_table ((char*)0x00401020)
void putout(char *string){
printf( string );
}
void main(void){
char*string="test\n";
void(*function)(char*);
char a;
function=putout;
function=(void(*)(char*))putout_address;
putout(string);
function(string);
putout_address( string );
a=putout_table[0];
}
※実行時には、「void putout(char *string)」のアドレスが
「0x00401020」なのを確認してね。
「function」は、関数ポインタね。
「putout_address( string );」は、マジで直接アドレスを
呼び出しています。
「a=putout_table[0];」は、直接アドレスから値を読み出しています。
※書きこみも出来ます。タダし呼び出したら跳びます。
VC++とかを使用している人は、基本的に
直接アドレスを使用する事は、ありません。
ですが知っていると…
良いことがあるかもしれません。
無いかもしれません。
| 固定リンク
コメント