独自のアドレス空間から特定のメモリアドレスにあるバイトを読み取るプログラムを C で作成しました。
それはこのように動作します:
- まず、ファイルから DWORD を読み取ります。
- 次に、この DWORD をメモリ アドレスとして使用し、現在のプロセスのアドレス空間でこのメモリ アドレスから 1 バイトを読み取ります。
コードの要約は次のとおりです。
FILE *fp;
char buffer[4];
fp=fopen("input.txt","rb");
// buffer will store the DWORD read from the file
fread(buffer, 1, 4, fp);
printf("the memory address is: %x", *buffer);
// I have to do all these type castings so that it prints only the byte example:
// 0x8b instead of 0xffffff8b
printf("the byte at this memory address is: %x\n", (unsigned)(unsigned char)(*(*buffer)));
// And I perform comparisons this way
if((unsigned)(unsigned char)(*(*buffer)) == 0x8b)
{
// do something
}
このプログラムは動作しますが、特定のメモリ アドレスからバイトを読み取って比較を実行する別の方法があるかどうか知りたいですか? 毎回、すべての型キャストを記述する必要があるためです。
また、次の構文を使用してファイルにバイトを書き込もうとすると、次のようになります。
// fp2 is the file pointer for the output file
fwrite(fp2, 1, 1, (unsigned)(unsigned char)(*(*buffer)));
警告が表示されます:
test.c(64) : warning C4047: 'function' : 'FILE *' differs in levels of indirectio
n from 'unsigned int'
test.c(64) : warning C4024: 'fwrite' : different types for formal and actual para
meter 4
ありがとう。