ในยุคที่ภาษาที่ปลอดภัยด้านหน่วยความจำและแนวคิดระดับสูงครองตลาด หนังสือโอเพนซอร์สเล่มใหม่ชื่อ Hacktical C ได้ปรากฏตัวขึ้น โดยวางตำแหน่งตัวเองเป็นคู่มือสำหรับแฮกเกอร์ในการใช้ภาษาโปรแกรม C หนังสือที่เผยแพร่ภายใต้ใบอนุญาตแบบเปิดนี้ได้จุดประกายการถกเถียงอย่างเข้มข้นในชุมชนโปรแกรมเมอร์เกี่ยวกับความเกี่ยวข้อง ความปลอดภัย และตำแหน่งของ C ในระบบนิเวศการเขียนโปรแกรมสมัยใหม่
C ในฐานะ Portable Assembly - ความจริงหรือเพียงตำนาน?
หนึ่งในประเด็นที่มีการโต้เถียงมากที่สุดในการสนทนาของชุมชนเกี่ยวข้องกับคำกล่าวของผู้เขียนที่ว่า C อยู่ในระดับที่แตกต่างในฐานะภาษาแอสเซมบลีที่พกพาได้เกือบทั้งหมด คำอธิบายนี้ถูกต่อต้านอย่างมีนัยสำคัญจากนักพัฒนาที่โต้แย้งว่า C ไม่ใช่ภาษาระดับต่ำอย่างแท้จริงตามมาตรฐานสมัยใหม่
When your computer is a PDP-11, otherwise it is a high level systems language like any other.
ผู้แสดงความคิดเห็นหลายคนชี้ให้เห็นว่า C จริงๆ แล้วสร้างเครื่องจำลองที่ไม่ได้เชื่อมโยงโดยตรงกับความสามารถของฮาร์ดแวร์สมัยใหม่ เมื่อเขียนโค้ด C นักพัฒนากำลังเขียนโปรแกรมสำหรับเครื่องเสมือนที่อธิบายโดยข้อกำหนดของ C มากกว่าฮาร์ดแวร์จริง การจำลองนี้รวมถึงพฤติกรรมที่ไม่มีอยู่ในฮาร์ดแวร์กายภาพ เช่น พฤติกรรมที่ไม่ได้กำหนดเกี่ยวกับการล้นของค่าที่มีเครื่องหมายและการติดตามการเริ่มต้นหน่วยความจำ นอกจากนี้ ผู้วิจารณ์ยังสังเกตว่า C ขาดการสนับสนุนโดยตรงสำหรับคุณสมบัติฮาร์ดแวร์หลายอย่างที่กลายเป็นมาตรฐานในช่วงหลายทศวรรษที่ผ่านมา รวมถึงการจัดการบิตที่เหมาะสมสำหรับค่าที่ต่ำกว่าไบต์และการดำเนินการ SIMD ที่ตรงไปตรงมา
ความปลอดภัยของหน่วยความจำและการถกเถียงเรื่องเสรีภาพพร้อมความรับผิดชอบ
จุดยืนของผู้เขียนที่ว่า C ไม่ได้พยายามอย่างหนักที่จะป้องกันคุณจากการทำผิดพลาดและให้อิสระพร้อมความรับผิดชอบได้กระตุ้นให้เกิดการอภิปรายอย่างมากเกี่ยวกับผลกระทบในโลกแห่งความเป็นจริงของปรัชญานี้ ในขณะที่ผู้แสดงความคิดเห็นบางคนชื่นชมแนวทางนี้ หลายคนท้าทายแนวคิดที่ว่าภาษาที่ไม่ปลอดภัยด้านหน่วยความจำเป็นทางเลือกที่เป็นไปได้สำหรับการพัฒนาซอฟต์แวร์สมัยใหม่
ผู้วิจารณ์โต้แย้งว่าปัญหาความปลอดภัยของหน่วยความจำไม่ใช่เพียงเรื่องของทักษะของโปรแกรมเมอร์ แต่เป็นช่องโหว่อย่างเป็นระบบที่ยังคงสร้างการโจมตีด้านความปลอดภัยโดยไม่คำนึงถึงความเชี่ยวชาญของนักพัฒนา พวกเขาชี้ให้เห็นว่าไม่มีความเชี่ยวชาญในการเขียนโปรแกรมของแต่ละบุคคลที่สามารถลดอัตราของ CVE ที่เกิดจากข้อบกพร่องด้านความปลอดภัยของหน่วยความจำในโปรแกรม C ได้อย่างมีความหมาย การถกเถียงขยายไปถึงว่าความยืดหยุ่นที่ C มอบให้นั้นคุ้มค่ากับต้นทุนด้านความปลอดภัยและการบำรุงรักษาหรือไม่ โดยเฉพาะอย่างยิ่งเมื่อภาษาสมัยใหม่ที่มีช่องทางหลบหลีกที่ไม่ปลอดภัย (เช่น Rust) สามารถให้ทั้งความปลอดภัยและประสิทธิภาพ
เทคนิค C ในทางปฏิบัติ: การแฮ็กอย่างชาญฉลาดหรือรูปแบบที่อันตราย?
ตัวหนังสือเองแสดงเทคนิคการเขียนโปรแกรม C ต่างๆ ซึ่งบางเทคนิคได้สร้างทั้งความชื่นชมและความกังวล ตัวอย่างหนึ่งที่ได้รับความสนใจเป็นพิเศษคือการใช้ coroutine โดยใช้มาโคร __LINE__
ในวิธีที่สร้างสรรค์:
หัวข้อสำคัญใน Hacktical C
* แมโคร
* การคำนวณแบบจุดทศนิยมคงที่
* รายการเชื่อมโยงสองทางแบบแทรกสอด
* งานที่ทำงานพร้อมกันแบบเบา
* ตัวจัดสรรหน่วยความจำแบบประกอบได้
* เวกเตอร์
* ข้อยกเว้น
* เซตและแผนที่แบบเรียงลำดับ
* การคอมไพล์แบบไดนามิก
* สตรีมที่ขยายได้
* บันทึกแบบมีโครงสร้าง
การรองรับภาษา C โดยคอมไพเลอร์
| คอมไพเลอร์ | C17 | C11 | VLAs | C23 |
|----------|-----|-----|------|-----|
| GCC | ใช่ | ใช่ | ใช่ | ใช่ (ค่าเริ่มต้น) |
| Clang | ใช่ | ใช่ | ใช่ | บางส่วน |
| MSVC | ใช่ (ตั้งแต่ปี 2020) | ใช่ | ไม่ (ไม่มีแผนที่จะรองรับ) | แผนการไม่ชัดเจน |
#define hc_task_yield(task)
do {
task->state = __LINE__;
return;
case __LINE__:;
} while (0)
ในขณะที่ผู้แสดงความคิดเห็นบางคนพบว่าเทคนิคนี้มีความชั่วร้ายแต่ชาญฉลาด คนอื่นๆ ชี้ไปที่การใช้งานทางเลือกและอภิปรายถึงข้อดีของการใช้ส่วนขยาย GNU เทียบกับ C มาตรฐาน สิ่งนี้เน้นให้เห็นถึงจุดเน้นของหนังสือเกี่ยวกับแนวทางปฏิบัติ บางครั้งก็ไม่ธรรมดาในการแก้ปัญหาใน C
ความสัมพันธ์ของ Microsoft กับ C
คำกล่าวของหนังสือที่ว่า Microsoft ได้เลือกที่จะละเลย C มาเป็นเวลานาน คอมไพเลอร์ของบริษัทล้าหลังกว่าคู่แข่งที่เหลือมาก ได้กระตุ้นให้เกิดการอภิปรายเกี่ยวกับสถานะปัจจุบันของการสนับสนุน C ของ Microsoft ผู้แสดงความคิดเห็นได้อธิบายว่าในขณะที่ Microsoft ให้ความสำคัญกับ C++ มากกว่า C ในอดีต แต่ก็มีการปรับปรุงในช่วงไม่กี่ปีที่ผ่านมา ในปี 2020 Microsoft ได้เพิ่มการสนับสนุนมาตรฐาน C11 และ C17 แม้ว่าคุณสมบัติบางอย่างเช่น Variable Length Arrays (VLAs) ยังคงไม่ได้รับการสนับสนุนโดยไม่มีแผนการสำหรับการนำไปใช้ ชุมชนยังคงไม่แน่ใจเกี่ยวกับแผนงานของ Microsoft สำหรับการสนับสนุน C23 โดยเฉพาะอย่างยิ่งเมื่อบริษัทให้ความสำคัญกับภาษาที่ปลอดภัยด้านหน่วยความจำมากขึ้นในฐานะส่วนหนึ่งของความคิดริเริ่มด้านความปลอดภัย
ในภูมิทัศน์ที่ครอบงำโดยการอภิปรายเกี่ยวกับความปลอดภัยของหน่วยความจำและคุณสมบัติภาษาสมัยใหม่มากขึ้น Hacktical C เป็นทั้งแหล่งข้อมูลที่ใช้งานได้จริงสำหรับโปรแกรมเมอร์ C และแถลงการณ์เชิงปรัชญาเกี่ยวกับการเลือกภาษาโปรแกรม ไม่ว่าจะมองว่าเป็นการรวบรวมเทคนิคที่มีคุณค่าหรือการปกป้องแนวทางการเขียนโปรแกรมระบบที่ถูกโต้แย้งมากขึ้น หนังสือเล่มนี้ประสบความสำเร็จในการสร้างการอภิปรายที่มีความคิดเกี่ยวกับตำแหน่งของ C ในโลกการเขียนโปรแกรมปัจจุบัน
อ้างอิง: Hacktical C