ここで少し問題が発生しています。マシンコードと関数ポインターをいじっています。また、VC++ が単にコンパイルを拒否するコードが少しあります。
これは、期待どおりに正確にコンパイルおよび実行されます。
#include <stdlib.h>
#include <stdio.h>
int main()
{
char tarr[] = {0xb8, 222, 0, 0, 0, 0xc3};
int (*testfn)() = tarr;
printf("%d", testfn()); // prints 222
getchar();
}
ただし、Visual C++ Expressは次のものをコンパイルせず、このエラーが発生します。error C2143: syntax error : missing ';' before 'type'
#include <stdlib.h>
#include <stdio.h>
int main()
{
char* tarr = (char*) malloc(1000);
tarr[0] = 0xb8;
tarr[1] = 222;
tarr[2] = 0;
tarr[3] = 0;
tarr[4] = 0;
tarr[5] = 0xc3;
int (*testfn)() = tarr; // syntax error here
printf("%d", testfn());
getchar();
}
おそらく欠陥のあるコードを見てきましたが、何か問題はありません。どうしたの?足りないものはありますか?