2

Cで作業しているとしましょう。

先に進んでこれを行うと:

char *word;
word = "Hello friends";
printf(word);

次に、XCode は、文字列リテラルを使用していないため、潜在的に安全でないものがある可能性があることを教えてくれます。それは何かが私のプログラムをハッキングするための入り口を意味しますか? もしそうなら、どのようにそれが起こることができますか?

または、これを行うと:

char *word;
word = "Hello friends";
printf("%s", word);

その後、XCode はフラグを立てず、問題ありません。違いは正確には何ですか?

4

2 に答える 2

4

への最初の引数printfは、出力したい文字列ではありません。フォーマット文字列です。さらなる引数と組み合わされたときに出力される文字列になる書式設定命令を含めることができます。

最初の例は、制御されていないフォーマット文字列の脆弱性です

于 2013-03-08T14:26:40.580 に答える
2

問題は、最初のケースでwordフォーマット仕様(、、、など)が含まれ%dている場合%f、それらの値はスタック上にあると想定しますが、実際にはそうではないため、クラッシュにつながる可能性があります。%sprintf()

フォーマットを気にしない場合は、puts()または代わりに使用してください。fputs()

于 2013-03-08T14:22:08.507 に答える