ภาษาแอสเซมบลี: อ่านภาษาเครื่อง
โปรแกรมของคุณกลายเป็นอะไรจริง ๆ
สำหรับผู้ที่เขียน C ได้และอยากเห็นว่าคอมไพเลอร์ผลิตอะไรออกมา และสำหรับผู้ที่กำลังมุ่งไปทาง reverse engineering การวิเคราะห์ช่องโหว่ หรือการดีบักระดับล่าง ที่ซึ่งไม่มีซอร์สให้อ่านและไบนารีคือหลักฐานเพียงอย่างเดียว คอร์สนี้สมมติว่าคุณมีเชลล์แบบยูนิกซ์ที่ใช้งานได้ และตั้งแต่คอร์ส C เป็นต้นไปสมมติว่ามีคอมไพเลอร์ C กับ make ด้วย ถ้ายังไม่มี — หรือไม่เคยเปิดเทอร์มินัลมาก่อน — คอร์ส "ตั้งต้นให้พร้อม" ติดตั้งและยืนยันทั้งหมดนั้นให้ก่อน และเนื้อหาตรงนี้ไม่ได้เล่าซ้ำ
ตัวอย่างโครงสร้างคอร์ส
เมื่อจบคอร์ส คุณจะทำอะไรได้บ้าง
- อ่าน disassembly ของ x86-64 และตามได้ว่ามันทำอะไร ทีละคำสั่ง
- เรียกชื่อ register ความกว้างของมัน และรู้ว่าตัวไหนรอดจากการเรียกฟังก์ชัน
- จำการแปลงของคอมไพเลอร์ได้: การหารที่กลายเป็นการคูณ ลูปที่ถูกแทนด้วยเลขคณิต lea ที่ถูกใช้คำนวณ
- ไล่ตามการควบคุมการไหลผ่านการเปรียบเทียบ การกระโดดแบบมีเงื่อนไข และลูป
- ตาม stack ผ่านการเรียกฟังก์ชัน เฟรม และการเรียกซ้ำ
- ใช้ objdump และตัวดีบักตรวจไฟล์ไบนารีที่คุณไม่ได้สร้างเอง
ก่อนเริ่มเรียน
แผนการเรียน
ภาษาไทยพร้อมสำหรับทุกขั้นการเรียน.
นี่คือเส้นทางการเรียนทั้งหมด แต่ละบทต่อยอดจากบทก่อนหน้า และด่านบังคับคือจุดที่คุณได้แสดงสิ่งที่ทำได้จริง.
- 01
โปรแกรมที่คุณเขียนไม่ใช่โปรแกรมที่รัน
บทเรียน · 17 นาที
- 02
สิบหก register กับชื่อที่มันตอบรับ
บทเรียน · 18 นาที
ต่อยอดจาก: โปรแกรมที่คุณเขียนไม่ใช่โปรแกรมที่รัน
- 03
การย้ายข้อมูล และคำสั่งที่ไม่ได้ย้ายอะไรเลย
บทเรียน · 18 นาที
ต่อยอดจาก: สิบหก register กับชื่อที่มันตอบรับ
- 04
เลขคณิต และสี่บิตที่มันทิ้งไว้ข้างหลัง
บทเรียน · 18 นาที
ต่อยอดจาก: การย้ายข้อมูล และคำสั่งที่ไม่ได้ย้ายอะไรเลย
- 05
สองวิธีเขียนคำสั่งเดียวกัน
บทเรียน · 14 นาที
ต่อยอดจาก: การย้ายข้อมูล และคำสั่งที่ไม่ได้ย้ายอะไรเลย
- 06
if กลายเป็นการกระโดดได้อย่างไร
บทเรียน · 18 นาที
ต่อยอดจาก: เลขคณิต และสี่บิตที่มันทิ้งไว้ข้างหลัง
- 07
หาลูปให้เจอ แล้วดูว่ามันกลายเป็นอะไร
บทเรียน · 18 นาที
ต่อยอดจาก: if กลายเป็นการกระโดดได้อย่างไร
- 08
กู้การวางข้อมูลกลับมาจากเลขคณิตของที่อยู่
บทเรียน · 18 นาที
ต่อยอดจาก: หาลูปให้เจอ แล้วดูว่ามันกลายเป็นอะไร
- 09
การเรียกฟังก์ชันทำงานอย่างไรจริง ๆ
บทเรียน · 17 นาที
ต่อยอดจาก: if กลายเป็นการกระโดดได้อย่างไร
- 10
ฟังก์ชันสร้างอะไรขึ้นมาก่อนเริ่มทำงาน
บทเรียน · 19 นาที
ต่อยอดจาก: การเรียกฟังก์ชันทำงานอย่างไรจริง ๆ
- 11
ข้อตกลงที่ทำให้โค้ดซึ่งคอมไพล์แยกกันทำงานร่วมกันได้
บทเรียน · 19 นาที
ต่อยอดจาก: ฟังก์ชันสร้างอะไรขึ้นมาก่อนเริ่มทำงาน
- 12
บทรวบยอด: วัดว่าการเรียกซ้ำมีราคาเท่าไร
ด่านบังคับ · 20 นาที
ต่อยอดจาก: ข้อตกลงที่ทำให้โค้ดซึ่งคอมไพล์แยกกันทำงานร่วมกันได้
- 13
เครื่องมือที่อ่านไบนารีให้คุณ
บทเรียน · 19 นาที
ต่อยอดจาก: ฟังก์ชันสร้างอะไรขึ้นมาก่อนเริ่มทำงาน
- 14
บทรวบยอด: ประกอบฟังก์ชันที่คุณไม่เคยเห็นขึ้นมาใหม่
ด่านบังคับ · 22 นาที
ต่อยอดจาก: เครื่องมือที่อ่านไบนารีให้คุณ · กู้การวางข้อมูลกลับมาจากเลขคณิตของที่อยู่
เริ่มเรียนด้วยบัญชี CYBERSKILLS เมื่อเปิดให้ใช้งาน
บัญชี CYBERSKILLS จะเก็บความก้าวหน้าและผลจากด่านบังคับไว้ด้วยกัน ระหว่างนี้ คุณใช้แผนการเรียนนี้เลือกเส้นทางที่ตรงกับเป้าหมายได้.
ดูตัวอย่างคอร์สทั้งหมด