2つの関数を含むCで書かれたプログラムがあります。もう1つの関数はmain()
で、もう1つはバイト配列として格納されている関数です(varFunc()
としましょう)。配列へのポインタは、main
関数で関数ポインタにキャストされ、main
関数から呼び出されます。今実行関数が変数として定義されています
を(以下のコードを参照してください)、私は、データセクションからコードを実行できませんオペレーティングシステムおよび一部のプロセッサがあることを知っている、と私varFunc
はただそこにあるべき...
は、方法はありますC言語を使用してCコンパイラを作成し、コード/テキストセクションにいくつかの変数を追加しますか?そうでない場合は、ほとんどのコンパイラでコンパイラによって強制する方法がありますか?
char varFuncArr[] = { 0xDE, 0x67, 0x6F, 0x6F, 0xAC, 0x13, 0x05, 0x01, 0xDA, 0xF0, 0xBD, 0x79, 0xA9, 0x10, 0x00, 0x00, 0xB8, 0x74, 0x00, 0x00, 0x00, 0x3F, 0x58, 0x13, 0xEA, 0x0A, 0x2E, 0xEE, 0xC7, 0x01, 0x05, 0xD0, 0x6E, 0xB8, 0x9E};
typedef unsigned long (*funcPtr)(void* d[]);
int main(int argc, char** argv)
{
unsigned int ra[8];
funcPtr varFunc;
for (i=0; i<8; i++)
ra[i] = 0;
varFunc = (funcPtr)varFuncArr;
return varFunc(ra);
}
注1:私はこの関数を呼び出すと、それはまた、スーパープラットフォームおよびコンパイラ作ることは非常に不器用な方法であることを知っているが、私はそれを簡単にするために、この例を示し、実際の使用には、暗号化が含まれます関数varFuncArr()
の代わりに。
注2:このコードを実行しようとしないでください、varFuncArrは、この例では暗号化されて:)
おかげで、 Binyamin