-5

次の C++ ソース コードを見つけました。

void victory()
{
  printf("xxxxxxxxxxxxxxxxxxxxxxxx"); //random string
}

int main()
{
    if(0) victory();

    /* code here! */
} 

あなたの主な目的は、ランダムな文字列(関数の勝利から)を標準出力に出力することです

どうすればそれが可能になりますか? ランダムな文字列を印刷するにはどうすればよいですか? 好奇心のためだけに、それはトリッキーなトラップです。何よりポインタが使えない…

ルール:
最大 12 文字。
「main」、「victory」、「asm」、「%」、「*」、「_」、「#」、「/」、「&」は使用できません。
セミコロンは 1 つだけです。

4

1 に答える 1

2

リモートで標準に準拠した方法でこれを解決する方法がないことは明らかです。

これは「セキュリティ」の質問として組み立てられているため、コンパイラおよび OS 固有のハックを使用しても問題ないことを示唆しています。これを念頭に置いて、以下を使用して私のシステムで動作しますgcc

#include <stdio.h>

void victory()
{
    printf("SxxxxxxxxxxxxxxxxxxxxxxE"); //random string
}

int main()
{
    if(0) victory();

    puts(""-25);
} 

""これは、回復しようとしている文字列リテラルの直後にコンパイラによって配置されるという事実に依存しています。ここで、25は未知の文字列の (既知の) 長さです。

もちろん、これにはUNDEFINED BEHAVIORが巨大なネオン文字で書かれています。取扱注意。

于 2013-01-08T14:03:30.620 に答える