ข้ามไปที่เนื้อหา
CYBERSKILLS Academy
ระดับกลาง4 ชม. 15 นาที · 14 ขั้นการเรียน · 2 ด่านบังคับ

ภาษาแอสเซมบลี: อ่านภาษาเครื่อง

โปรแกรมของคุณกลายเป็นอะไรจริง ๆ

สำหรับผู้ที่เขียน C ได้และอยากเห็นว่าคอมไพเลอร์ผลิตอะไรออกมา และสำหรับผู้ที่กำลังมุ่งไปทาง reverse engineering การวิเคราะห์ช่องโหว่ หรือการดีบักระดับล่าง ที่ซึ่งไม่มีซอร์สให้อ่านและไบนารีคือหลักฐานเพียงอย่างเดียว คอร์สนี้สมมติว่าคุณมีเชลล์แบบยูนิกซ์ที่ใช้งานได้ และตั้งแต่คอร์ส C เป็นต้นไปสมมติว่ามีคอมไพเลอร์ C กับ make ด้วย ถ้ายังไม่มี — หรือไม่เคยเปิดเทอร์มินัลมาก่อน — คอร์ส "ตั้งต้นให้พร้อม" ติดตั้งและยืนยันทั้งหมดนั้นให้ก่อน และเนื้อหาตรงนี้ไม่ได้เล่าซ้ำ

ตัวอย่างโครงสร้างคอร์ส

เมื่อจบคอร์ส คุณจะทำอะไรได้บ้าง

  • อ่าน disassembly ของ x86-64 และตามได้ว่ามันทำอะไร ทีละคำสั่ง
  • เรียกชื่อ register ความกว้างของมัน และรู้ว่าตัวไหนรอดจากการเรียกฟังก์ชัน
  • จำการแปลงของคอมไพเลอร์ได้: การหารที่กลายเป็นการคูณ ลูปที่ถูกแทนด้วยเลขคณิต lea ที่ถูกใช้คำนวณ
  • ไล่ตามการควบคุมการไหลผ่านการเปรียบเทียบ การกระโดดแบบมีเงื่อนไข และลูป
  • ตาม stack ผ่านการเรียกฟังก์ชัน เฟรม และการเรียกซ้ำ
  • ใช้ objdump และตัวดีบักตรวจไฟล์ไบนารีที่คุณไม่ได้สร้างเอง

ก่อนเริ่มเรียน

แผนการเรียน

ภาษาไทยพร้อมสำหรับทุกขั้นการเรียน.

นี่คือเส้นทางการเรียนทั้งหมด แต่ละบทต่อยอดจากบทก่อนหน้า และด่านบังคับคือจุดที่คุณได้แสดงสิ่งที่ทำได้จริง.

  1. 01

    โปรแกรมที่คุณเขียนไม่ใช่โปรแกรมที่รัน

    บทเรียน · 17 นาที

  2. 02

    สิบหก register กับชื่อที่มันตอบรับ

    บทเรียน · 18 นาที

    ต่อยอดจาก: โปรแกรมที่คุณเขียนไม่ใช่โปรแกรมที่รัน

  3. 03

    การย้ายข้อมูล และคำสั่งที่ไม่ได้ย้ายอะไรเลย

    บทเรียน · 18 นาที

    ต่อยอดจาก: สิบหก register กับชื่อที่มันตอบรับ

  4. 04

    เลขคณิต และสี่บิตที่มันทิ้งไว้ข้างหลัง

    บทเรียน · 18 นาที

    ต่อยอดจาก: การย้ายข้อมูล และคำสั่งที่ไม่ได้ย้ายอะไรเลย

  5. 05

    สองวิธีเขียนคำสั่งเดียวกัน

    บทเรียน · 14 นาที

    ต่อยอดจาก: การย้ายข้อมูล และคำสั่งที่ไม่ได้ย้ายอะไรเลย

  6. 06

    if กลายเป็นการกระโดดได้อย่างไร

    บทเรียน · 18 นาที

    ต่อยอดจาก: เลขคณิต และสี่บิตที่มันทิ้งไว้ข้างหลัง

  7. 07

    หาลูปให้เจอ แล้วดูว่ามันกลายเป็นอะไร

    บทเรียน · 18 นาที

    ต่อยอดจาก: if กลายเป็นการกระโดดได้อย่างไร

  8. 08

    กู้การวางข้อมูลกลับมาจากเลขคณิตของที่อยู่

    บทเรียน · 18 นาที

    ต่อยอดจาก: หาลูปให้เจอ แล้วดูว่ามันกลายเป็นอะไร

  9. 09

    การเรียกฟังก์ชันทำงานอย่างไรจริง ๆ

    บทเรียน · 17 นาที

    ต่อยอดจาก: if กลายเป็นการกระโดดได้อย่างไร

  10. 10

    ฟังก์ชันสร้างอะไรขึ้นมาก่อนเริ่มทำงาน

    บทเรียน · 19 นาที

    ต่อยอดจาก: การเรียกฟังก์ชันทำงานอย่างไรจริง ๆ

  11. 11

    ข้อตกลงที่ทำให้โค้ดซึ่งคอมไพล์แยกกันทำงานร่วมกันได้

    บทเรียน · 19 นาที

    ต่อยอดจาก: ฟังก์ชันสร้างอะไรขึ้นมาก่อนเริ่มทำงาน

  12. 12

    บทรวบยอด: วัดว่าการเรียกซ้ำมีราคาเท่าไร

    ด่านบังคับ · 20 นาที

    ต่อยอดจาก: ข้อตกลงที่ทำให้โค้ดซึ่งคอมไพล์แยกกันทำงานร่วมกันได้

  13. 13

    เครื่องมือที่อ่านไบนารีให้คุณ

    บทเรียน · 19 นาที

    ต่อยอดจาก: ฟังก์ชันสร้างอะไรขึ้นมาก่อนเริ่มทำงาน

  14. 14

    บทรวบยอด: ประกอบฟังก์ชันที่คุณไม่เคยเห็นขึ้นมาใหม่

    ด่านบังคับ · 22 นาที

    ต่อยอดจาก: เครื่องมือที่อ่านไบนารีให้คุณ · กู้การวางข้อมูลกลับมาจากเลขคณิตของที่อยู่

เริ่มเรียนด้วยบัญชี CYBERSKILLS เมื่อเปิดให้ใช้งาน

บัญชี CYBERSKILLS จะเก็บความก้าวหน้าและผลจากด่านบังคับไว้ด้วยกัน ระหว่างนี้ คุณใช้แผนการเรียนนี้เลือกเส้นทางที่ตรงกับเป้าหมายได้.

ดูตัวอย่างคอร์สทั้งหมด