コードインジェクションはC#でも機能します!


15

次のC#プログラム出力が与えられた場合、プログラムが出力するようFalseに「悪意のある」コード行を挿入しますTrue

class Program
{
    static void Main()
    {
        System.Console.Write("False");
        ;
    }
}

あなたの答えは、第二のセミコロンを置き換え、出力するプログラム原因となる文字列で構成する必要がありTrue、全体Trueと何もなく、True(いなくても改行を)。stdoutがコンソールに出力され、stdoutがファイルにリダイレクトされる場合、これを行う必要があります。

最短の答えが勝ちです。


あなたの客観的な勝利基準は何ですか?
JB

@JBパズルには勝利基準が必要ですか?編集します。
ケンドールフレイ

私は主にコードゴルフの発言に反応していますが、ポイントは立っています:受け入れられる答えはどれですか?
JB

@JB最短回答がベストアンサーです。
ケンドールフレイ

さて、それコードゴルフですよね?
JB

回答:


17

52文字

}static Program(){System.Console.Write(0<1);for(;;);

したがって、全体は次のようになります。

class Program
{
    static void Main()
    {
        System.Console.Write( "False" );
    }
    static Program()
    {
        System.Console.Write( 0 < 1 ); 
        for ( ; ; ) ;
    }
}

回答の途中で質問を編集してすみません。改行は使用できなくなりましたWrite。使用する必要があります。
ケンドールフレイ14年

OK、私はに変更WriteLineしましたWrite
ダンコドゥルビッチ14年

1
あなたはおそらくあなたの出口をfor(;;);に置き換えることでいくつかのバイトを節約することができます。
ヨアヒムイザクソン14年

@JoachimIsakssonはい、指定された要件を満たしています。
ケンドールフレイ

4
}static Program(){System.Console.Write(0<1);for(;;);常になる可能性}static Program(){for(System.Console.Write(0<1);;);
NPSF3000

7

C#、51文字

Console.Write("\b\b\b\b\b");Console.Write("True ");

標準出力でのみ動作します


私が最初に試したのは、残念ながら最初ののために動作しませんWriteLine
ヴェレオス14年

3
今では、Write:/私は...私たちは、それが変化し続ける場合は、これを解決するために管理する方法を得ることはありません
Vereos

@Vereos「改行または改行なし」のあいまいさを削除したかった。
ケンドールフレイ14年

3
の2つのインスタンスは必要なく、5 の代わりにConsole.Write使用できます。\r\bConsole.Write("\rTrue ");
ブライアンS 14年

私はそれが基準を満たしているとは思わない。実際には最初にFalseを出力し、その後、後でTrueによって上書きされます。
ミクロ

1

stdoutがファイルにリダイレクトされる場合でも、RamonBozaの答えを一般化して動作させることができます。

Linux上のMonoでプログラムが実行され、アセンブリがMono.Posix.dllロードされていると仮定します。

if(Mono.Unix.Native.Syscall.isatty(1))
{
    Console.Write("\rTrue ");
}
else
{
    // Truncate the output file first
    Console.OpenStandardOutput().SetLength(0);
    Console.Write("True");
}

私はこれがWindowsで動作することを疑いますが、おそらくに相当するものがありisatty()ます。


1

83 ... WIP

これが機能することを望んでいましたが、コンパイラで期待していたように、「False」がインターンされていないようです。

//}unsafe static Program(){fixed(char*f="False"){*(long*)f=0x65007500720054;*(f+4)=' ';}
}unsafe static Program(){fixed(char*f="False")for(int i=5;i-->0;)*(f+i)="True "[i];

食べない

class Program
{
    static void Main(string[] args)
    {
        Console.Write("False");
    }

    unsafe static Program()
    {
        fixed (char* f = "False") for (int i = 5; i-- > 0; ) *(f + i) = "True "[i];
    }
}

1
class Program
{
    static void Main()
    {
        System.Console.Write("False");

        System.Console.Clear(); System.Console.Write("True");

        Console.ReadLine();
    }
}

stdoutがリダイレクトされる場合、これは機能しません。
ケンドールフレイ14

0

これが受け入れられるかどうかはわかりません。
質問はコンパイラオプションについては何も言っていないので、アプリのエントリポイントを変更できると思います。
55文字、受け入れられた回答より3つ多い

}class P{static void Main(){System.Console.Write(1>0);}

いっぱい

class Program
{
    static void Main()
    {
        System.Console.Write("False");
    }
    class P
    {
        static void Main() { System.Console.Write(1 > 0); }
    }
}

コミュニティへようこそ!
エリックアウトゴルファー

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀありがとう。これは素晴らしいサイトです!!!
ジョージヴォボス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.