Xem Tóm Tắt Bài Viết Này
Vậy Assemly Language là gì ?
Assembly Language (hay viết tắt là ASM) là ngôn ngữ bậc thấp, chuẩn xác nó là ngôn ngữ thuộc thế hệ
thứ 2
Bạn đang đọc: Assembly là gì? Cách tự học lập trình Assembly mới nhất 2020 – https://sangtaotrongtamtay.vn
(2nd generation). ASM sử dụng những từ gợi nhớ (mnemonics) để viết những chỉ thị (instructions) lập trình cho máy tính thay vì bằng những dãy 0 , 1.
những ASM sẽ cần một chương trình Assembler tương thích (NASM, AS, DASM) để dịch chúng thành những tệp binary và một trình linker để đường link những thành phần lại , chỉ định nơi khởi đầu của chương trình , đây là việc cầm buộc.
VD: Hàm main trong C mặc định là nơi chương trình khởi chạy. Lệnh dịch source C ra binary theo thực tiễn nó đã làm 2 . bước trên: dịch và đường link (xác định luôn nơi khởi chạy chương trình là main).
một trong những đặc tính của chương trình viết trực tiếp bằng ASM là: chúng có vận tốc thực thi cao và tốn kém bộ nhớ ít hơn những chường viết bởi những ngôn từ lập trình bậc cao.
Việc học ASM cũng sẽ giúp chúng ta hiểu thêm về kiến trúc phần cứng máy tính, tuyệt kỹ chúng hoạt động , tương tác với nhau. VD như những thành phần cơ bản trong máy tính, cách chúng marketing tin cho nhau:
ASM hoàn toàn có thể tương tác rất sâu dưới hệ thống, chúng có năng lực giao tiếp trực tiếp với những phần cứng , tóm chúng hoạt động theo ý người lập trình. nó làm cho chúng ta có hẳn một ngành đưa tên là “lập trình nhúng”.
Cái khó của việc học ASM
Thường thường khi học một phương ngữ lập trình chúng ta chỉ thuận tiện là cài đặt môi trường lập trình, công cụ biên dịch và dùng những editor hoặc IDE nếu như hoàn toàn có thể học lập trình. Viết một chương trình thuận tiện rồi biên dịch , chạy thử trên những ngôn ngữ bậc cao (C, C++, Java) là rất giản đơn. nhưng với ASM thì bạn sẽ dễ bị “nản” vì chẳng thể dịch và chạy code ASM đúng như hướng dẫn.
nguyên do là ASM lập trình những chỉ thị cho phần cứng tuy nhiên chúng lại lệ thuộc vào kiến trúc CPU (ARM, x86-32, x86-64), hệ điều hành (Linux, Windows, Mac) , những tập chỉ thị mà nhà phân phối phần cứng đưa rõ ra. hầu hết những chỉ dẫn, sách vở được viết cho kiến trúc iA-32. một vài hướng dẫn mới gần đây hơn thì viết cho kiến trúc x86-64 trên Linux, sử dụng Assembler của GNU.
Khác với ngôn ngữ C, về lý thuyết chúng ta hoàn toàn có thể dịch lại mà không nhất thiết đổi source code lúc đầu. tuy nhiên thực tế thì việc làm này khó xảy ra vì chúng ta chỉ có năng lực triển khai được điều trên nếu như không gọi tới những API của hệ điều hành. nói tới đây lại thấy yêu Java hơn, Java thực sự là cuộc cách mạng viết một lần, chạy mọi nơi và cũng chẳng cần phải dịch lại. Tất cả mọi thứ đã có máy ảo Java lo.
Thêm một khó khăn vất vả nữa cho những người học ASM trên máy Mac như mình. Apple chỉ định riêng bộ linker (Match-O) cho ASM, chúng sử dụng một vài chỉ thị riêng, padding memory riêng (có 4 lớp padding). Việc viết ASM cho máy Mac thật sự có rất ít bài đăng chỉ dẫn, doc của Apple thì như kinh thánh … Việc nhớ những thanh ghi, những chỉ thị thôi đã đuối lắm rồi, thêm Apple hành nữa thật là khó càng thêm khó !!! đơn cử Apple OS X Assembler Reference.
VD : Một chương trình in ra “ Hello World ” viết bằng ASM trên Mac OS như sau :
1
2 3 . 4 5 . 6 . 7 8 . 9 . 10 |
.section __DATA,__data str : .section __TEXT , __text . globl _main movl $0x2000004và %eax movl $1và %edi movq str@GOTPCREL(%rip), %rsi movq $100, %rdx syscall movl $0, %ebx movl $0x2000001, %eax syscall |
dùng GNU Assembler, linker , chạy thử:
1
2 3 . |
as hello.asm – o hello.old hello. o – o hello – e _main. / hello |
Như những bạn đã thấy việc in một đoạn text ra màn hình với ASM khá phức tạp, đó là chưa nói đến ta phải viết đúng chỉ thị của OS , CPU hiện trong. toàn bộ chỉ là những chỉ thị cho những thanh ghi chứ không hề có kiểu 1 lệnh in ra tổng số như C.
ASM khó vậy thì học để làm gì ?!?
ASM sẽ chẳng có ý nghĩa gì nếu như chúng ta không thuộc tập sau đây:
- những người cần lập trình phần cứng, mạch điện tử, những chip vi xử lý.
- những người lập trình compiler, hệ điều hành. (Trong đó có anh Chris Lattner, tác giả của LLVM và Swift mà mình rất ngưỡng mộ vì anh cực kỳ trẻ – SN 1978)
- Hacker chuyên nghiệp.
- Reverse Engineer: nếu như dịch là kỹ sư đảo thì không hay và cũng ko đủ ý. RE là những kỹ sư chuyên phân tích, mổ xẻ những chương trình để hiểu sâu đơn cử bên tại nó thế nào, RE thường hay ứng dụng tại an ninh: phát hiện mã độc, nhìn nhận thuật toán mã hoá … , những lĩnh vực khác có tương quan.
Xem thêm : SQL Injection là gì ? Hướng dẫn cách kiểm tra SQL Injection mới nhất 2020
Một số quyền lợi khác của ASM là:
- hoàn toàn có thể dùng debug chương trình mà không cần source code.
- hoàn toàn có thể sử dụng để tối ưu hoá chương trình: một số ít dân code ASM chuyên nghiệp sử dụng C để code và dịch ra ASM rồi edit lại để tương thích với kiến trúc , những chỉ thị riêng , tối ưu của nhà sản xuất chip. nguyên do là những compiler chỉ dịch ra ASM chung nhất cho những dòng chip.
Một số tài liệu có sự tương quan tới ASM
Mình xin san sẻ lại một số ít tài liệu mà trong thời hạn qua mình chiếm hữu, để ai đấy có đang tìm hiểu và khám phá ASM hoàn toàn có thể xem xét thêm qua:
Ebook :
- Introduction to 6 Bit Assembly Programming for Linux: Quyển này tinh gọn, rất hấp dẫn. Third edition có cho cả MacOS. Phiên bản này chỉ có cho Linux.
- Professional Assembly Language : Quyển này tác giả nói rất sâu về chính sách, tổng thể những chỉ số register, chính sách vận hành phần cứng … Tiếc là tác giả viết cho kiến trúc IA-32 và phần code ASM cũng chỉ cho Linux x86-64 thôi.
- Hacking: The Art of Exploitation: dành cho ai thích hack, cuốn này nói cực kỳ sâu về kỹ thuật hacking đặc biệt quan trọng là dùng ASM để can thiệp hệ thống.
- Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation: Quyển này cho những ai ham thích RE.
** Sách tiếng Việt mình thấy có vài cuốn tuy nhiên mở vài trang đọc thực sự không hiểu gì !!!
Bài viết :
- Assembly “hello, world” for OS X: Bài này viết ASM với assembler NASM. NASM trên MacOS ko có sẵn, phải cài thêm thông qua brew.
- x86 Assembly Guide: bài này mình hay sử dụng để tra cứu giúp nhanh những chỉ thị và thanh ghi (vì não cá vàng chưa thể nhớ nổi @@)
- OS X Assembler Reference: Guide về Assembler cho OS X của Apple, mình sử dụng doc này để convert code bên Linux qua. thứ này thật sự không giúp mình nhiều, chủ yếu ớt coi phần Data Segment và memory padding để sử dụng thanh ghi EAX cho chuẩn xác. nếu như không chương trình sẽ chạy ra lỗi bus error.
Dù rằng dừng lại khá sớm với việc học ASM tuy nhiên mình cũng hài lòng với hậu quả đạt được. Mình mang lại được một mớ kiến thức kha khá về CPU, cơ bản về việc những process cấp phát bộ nhớ. và đặc biệt quan trọng là giờ đây khi cái màn hình debug trong XCode hiện lên 1 mớ ASM mình hoàn toàn có thể biết được phần nào chứ không coi nó như thứ ngôn ngữ ngoài hành tinh nữa.khá sớm với việc học ASMmình cũngvới. Mìnhmột mớ kiến thức và kỹ năng tương đối về CPU, về việcprocess cấp phép bộ nhớ. làkhi cái màn hình hiển thị debugXCode hiện lên 1 mớ ASM mìnhphần nào chứ khôngnó như thứ ngôn ngữnữa
Chúc những bạn học tốt.
Nguồn : https://techtalk.vn/
Source: https://sangtaotrongtamtay.vn
Category: Giáo dục