Skip to main content

Các công cụ để viết/chạy x64 assembly

Bài trước viết Hello world dùng x64 assembly dù không phải quá khó, nhưng cũng dài 16 dòng, hơn cả Java, lại còn toàn magic value aex, ebx, ... nếu bảo không nhìn tài liệu, cũng khó lòng mà tự viết được từ 1 file trắng.

Chuyện này nghĩa là, để print cũng khó khăn, mà print khó, thì học lập trình kiểu gì? làm sao biết 1+1 ra kết quả bao nhiêu?

Debugger là câu trả lời! Debugger giúp không cần print, mà vẫn biết giá trị là bao nhiêu.

Bài này giới thiệu 2 debugger: 1 đủ phức tạp, và 1 rất đơn giản.

SASM - Simple crossplatform IDE for NASM, MASM, GAS, FASM assembly languages

Một IDE đơn giản, cài trên Ubuntu 20.04 chỉ với:

sudo apt-get install sasm

sau đó bật lên vào menu Settings > settings chọn "Mode" x64 để chạy code x64. menu "Debug", chọn "show registers" để thấy các giá trị.

Ví dụ thực hiện gán rax bằng 2 rồi cộng 1, thấy rax là 3

mov rax, 2  ; rax=2
add rax, 1  ; rax+=1

Bấm F5 để bắt đầu debug, bấm F11 để tới câu lệnh tiếp theo.

sasm

PS: Windows có rất nhiều tool xịn như x64dbg hay windbg.

GDB - pwndbg

Như đã giới thiệu trong Học Rust với gdb, gdb là debugger phổ biến bậc nhất trên môi trường Unix/Linux. Cài thêm extension vào để có màu mè , ở đây chọn pwndbg:

git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
global _start

section .text
_start:
    mov rbp, rsp; for correct debugging
    mov ebp, esp; for correct debugging
    ;write your code here
    mov rax, 2
    add rax, 1

    xor rdx, rdx
    mov rax, 14
    mov r8, 3
    div r8

    mov rcx, 5
    add rcx, 4

    xor rdx, rdx
    mul rcx
    sub rcx, 7

    xor eax, eax
    ret

build file asm rồi chạy:

$ sudo apt install -y nasm
$ nasm -felf64 test.asm
$ ld test.o
$ gdb ./a.out

pwndbg

Kết luận

Không print được thì dùng debugger. Dùng debugger thì không còn phải print nữa.

Happy debugging!

Hết.

HVN at http://pymi.vn and https://www.familug.org.

Ủng hộ tác giả 🍺

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG