🤙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 kernel

SysRead:

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 kernel

SysExit:

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:

Hơi lỗi phông tí thôi nhưng mà vẫn đẹp :3

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