คำถามติดแท็ก buffer-overflow

14
เหตุใดจึงเป็นเช่นนี้สำหรับการออกจากลูปในบางแพลตฟอร์มและไม่ใช่ในแพลตฟอร์มอื่น
ฉันเพิ่งเริ่มเรียนรู้ 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 …

11
ทำไมฟังก์ชั่นที่ได้รับมีอันตรายมากจนไม่ควรใช้?
เมื่อฉันพยายามรวบรวมรหัส C ที่ใช้gets()ฟังก์ชันกับ GCC ฉันได้รับคำเตือนนี้: (.text + 0x34): คำเตือน: ฟังก์ชั่น `รับ 'เป็นอันตรายและไม่ควรใช้ ฉันจำได้ว่าสิ่งนี้เกี่ยวข้องกับการป้องกันและความปลอดภัยของกองซ้อน แต่ฉันไม่แน่ใจว่าทำไม ฉันจะลบคำเตือนนี้ได้อย่างไรและทำไมจึงมีคำเตือนเกี่ยวกับการใช้ 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; } รหัสนี้มีความเสี่ยงต่อการโจมตีแบบ buffer overflow และฉันพยายามหาสาเหตุ ฉันคิดว่ามันเกี่ยวกับlenการได้รับการประกาศshortแทนที่จะเป็นintแต่ฉันไม่แน่ใจจริงๆ ความคิดใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.