タグ付けされた質問 「buffer-overflow」

14
一部のプラットフォームでこのforループが終了し、他のプラットフォームでは終了しないのはなぜですか?
最近Cを学び始め、Cを題材にした授業を行っています。私は現在ループで遊んでいて、説明の方法がわからない奇妙な動作に遭遇しています。 #include <stdio.h> int main() { int array[10],i; for (i = 0; i <=10 ; i++) { array[i]=0; /*code should never terminate*/ printf("test \n"); } printf("%d \n", sizeof(array)/sizeof(int)); return 0; } Ubuntu 14.04を実行している私のラップトップでは、このコードは壊れません。それは完了するまで実行されます。CentOS 6.6を実行している私の学校のコンピューターでも、問題なく動作します。Windows 8.1では、ループが終了することはありません。 さらに奇妙なのは、forループの条件を次のように編集するi <= 11と、コードがUbuntuを実行しているラップトップでのみ終了することです。CentOSとWindowsでは終了しません。 メモリで何が起こっているのか、同じコードを実行している異なるOSが異なる結果をもたらす理由を誰かが説明できますか? 編集:forループが範囲外になることを知っています。わざとやってます。OSやコンピューターによって動作がどのように異なるのかがわかりません。

11
GET関数が危険なため使用できないのはなぜですか?
gets()GCCで関数を使用するCコードをコンパイルしようとすると、次の警告が表示されます。 (.text + 0x34):警告: `gets '関数は危険なので使用しないでください。 これはスタックの保護とセキュリティに関係していることを覚えていますが、正確な理由はわかりません。 この警告を削除するにはどうすればよいgets()ですか。また、使用に関する警告が表示されるのはなぜですか。 gets()とても危険なのなら、なぜそれを削除できないのでしょうか?
229 c  fgets  buffer-overflow  gets 

5
なぜこのコードはバッファオーバーフロー攻撃に対して脆弱なのですか?
int func(char* str) { char buffer[100]; unsigned short len = strlen(str); if(len >= 100) { return (-1); } strncpy(buffer,str,strlen(str)); return 0; } このコードはバッファオーバーフロー攻撃に対して脆弱であり、私はその理由を理解しようとしています。の代わりにとlen宣言されていることに関係していると思いますが、本当にわかりません。shortint 何か案は?


10
strcpyの代わりにstrncpyを使用する必要があるのはなぜですか?
編集:例のソースを追加しました。 私はこの例に出くわしました: char source[MAX] = "123456789"; char source1[MAX] = "123456789"; char destination[MAX] = "abcdefg"; char destination1[MAX] = "abcdefg"; char *return_string; int index = 5; /* This is how strcpy works */ printf("destination is originally = '%s'\n", destination); return_string = strcpy(destination, source); printf("after strcpy, dest becomes '%s'\n\n", destination); /* This is …

6
scanfがCでバッファオーバーフローを引き起こすのを防ぐ方法は?
私はこのコードを使用します: while ( scanf("%s", buf) == 1 ){ ランダムな長さの文字列を渡すことができるように、バッファオーバーフローの可能性を防ぐための最良の方法は何でしょうか? たとえば、次のように呼び出すことで、入力文字列を制限できることはわかっています。 while ( scanf("%20s", buf) == 1 ){ しかし、ユーザーが入力したものは何でも処理できるようにしたいと思います。または、scanfを使用してこれを安全に行うことはできず、fgetsを使用する必要がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.