🤙Linux System Call
Như các bài trước các bạn đã thấy một vài instruction có cú pháp là: int 0x80. Thì đó bạn có thể hiểu là 1 system call. Đối với từng cấu trúc x86_32 với x86_64 thì sẽ có các system call và giá trị khác nhau. Ví dụ ở 32 bits thì syswrite = 0x4, nhưng ở 64 bits, syswrite = 0x1. Vậy nên bạn cần chú ý về vấn đề này trước khi bắt tay vào thực hiện.
Ở đây tôi sẽ lấy 1 vài ví dụ cơ bản của system call như:
SysWrite:
mov edx,4 ; message length
mov ecx,msg ; message to write
mov ebx,1 ; file descriptor (stdout)
mov eax,4 ; system call number (sys_write)
int 0x80 ; call kernelSysRead:
mov edx,4 ; message to read length
mov ecx,buffer ; where to read
mov ebx,0 ; file descriptor (stdin)
mov eax,3 ; system call number (sys_read)
int 0x80 ; call kernelSysExit:
mov eax,1 ; system call number (sys_exit)as
int 0x80 ; call kernelĐể hiểu tường tận hơn về 1 chương trình hoàn chỉnh sử dụng các loại syscall thì tôi có chương trình sau đây:
*resb: là câu lệnh giúp máy có thể biết được cần dành bao nhiêu byte cho biến được khởi tạo.
Và đầu ra của chương trình trên sẽ là:

Vậy là cơ bản là bài hôm nay dừng tạm ở đây. Nếu khó hiểu quá thì làm thêm bài tập bên dưới này để hiểu rõ hơn nha hoặc đọc lại blog 1 lần nữa xem sao 😁
Nhập tên của bạn và chương trình sẽ trả lại Hello <name> như ảnh minh họa dưới đây:

Bạn nên tự mình giải quyết nó trước khi xem code mẫu của tôi.
Last updated