คำถามติดแท็ก stack

3
การจัดสรรสแต็คทำงานใน Linux อย่างไร
ระบบปฏิบัติการสำรองพื้นที่เสมือนที่ถูกต้องตามจำนวนที่แน่นอนสำหรับกองซ้อนหรืออย่างอื่นหรือไม่? ฉันสามารถสร้าง stack overflow โดยใช้ตัวแปรท้องถิ่นขนาดใหญ่ได้หรือไม่? ฉันได้เขียนCโปรแกรมขนาดเล็กเพื่อทดสอบสมมติฐานของฉัน มันทำงานบน X86-64 CentOS 6.5 #include <string.h> #include <stdio.h> int main() { int n = 10240 * 1024; char a[n]; memset(a, 'x', n); printf("%x\n%x\n", &a[0], &a[n-1]); getchar(); return 0; } เรียกใช้โปรแกรมให้&a[0] = f0ceabe0และ&a[n-1] = f16eabdf แม็พ proc แสดงสแต็ก: 7ffff0cea000-7ffff16ec000. (10248 * 1024B) จากนั้นฉันก็พยายามเพิ่ม n = …

2
อะไรที่ทำให้ fs: [0x28] (กองนกขมิ้น)?
จากโพสต์นี้จะแสดงให้เห็นว่าFS:[0x28]เป็นนกขมิ้น ฉันกำลังสร้างรหัสเดียวกันโดยใช้ GCC ในฟังก์ชั่นนี้ void foo () { char a[500] = {}; printf("%s", a); } โดยเฉพาะฉันได้รับการชุมนุมครั้งนี้ .. 0x000006b5 64488b042528. mov rax, qword fs:[0x28] ; [0x28:8]=0x1978 ; '(' ; "x\x19" 0x000006be 488945f8 mov qword [local_8h], rax ...stuff... 0x00000700 488b45f8 mov rax, qword [local_8h] 0x00000704 644833042528. xor rax, qword fs:[0x28] 0x0000070d 7405 …
13 linux  security  gcc  stack 

1
ฉันจะตรวจสอบปริมาณการใช้หน่วยความจำต่อกระบวนการ / ต่อเธรดได้อย่างไร (แบ่งออกเป็นฮีปสแต็คข้อมูลรหัส)
ก่อนที่จะกระโดดและเขียนรหัสของตัวเองฉันต้องการตรวจสอบว่ามีซอฟต์แวร์ GNU / Linux ที่สามารถส่งออกบางสิ่งที่คล้ายกับQNXshowmemหรือไม่ สำหรับแต่ละเธรดของแต่ละกระบวนการที่กำลังทำงานอยู่ฉันต้องการดูปริมาณการใช้หน่วยความจำที่แบ่งออกเป็นหมวดหมู่ต่อไปนี้: Process listing (Total, Code, Data, Heap, Stack, Other) 319488 1024000 24587 167936 24576 0 4103 devc-con-hid (thread 2) 0 0 0 0 4096 0 4103 devc-con-hid (thread 2) 0 0 0 0 20480 0 4103 devc-con-hid (thread 1) 0 102400 8192 0 0 0 …
11 linux  memory  stack 

2
ทำไมบน Linux ที่ทันสมัยขนาดสแต็กเริ่มต้นมีขนาดใหญ่มาก - 8MB (แม้แต่ 10 ในการกระจาย)
ตัวอย่างเช่นบน OSX มันน้อยกว่า 512k มีขนาดที่แนะนำโดยคำนึงว่าแอปไม่ได้ใช้การสอบถามซ้ำและไม่ได้จัดสรรตัวแปรสแต็กจำนวนมากหรือไม่ ฉันรู้ว่าคำถามนั้นกว้างเกินไปและมันก็ขึ้นอยู่กับการใช้งาน แต่ก็ยังอยากถามเพราะฉันสงสัยว่ามีเหตุผลซ่อนอยู่ภายใน / ระบบ /หลังจำนวนมากนี้ ฉันสงสัยว่าในขณะที่ฉันตั้งใจจะเปลี่ยนขนาดสแต็คเป็น 512 KiB ในแอปของฉัน - นี่ยังคงฟังดูเหมือนเป็นจำนวนมากสำหรับเรื่องนี้ แต่มันมีขนาดเล็กกว่า 8MiB - และจะทำให้หน่วยความจำเสมือนของกระบวนการลดลงอย่างมีนัยสำคัญ มีเธรดจำนวนมาก (I / O) ฉันก็รู้ว่ามันไม่เจ็บจริง ๆ อธิบายได้ดีที่นี่ : ขนาดสแต็กเริ่มต้นสำหรับ pthreads
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.