tôi đang học asm trên Linux (noobuntu 10,04) Tôi có đoạn mã sau tắt của: http://asm.sourceforge.net/intro/hello.htmlhội, chào hỏi thế giới
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;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
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
Đó là một hello world đơn giản. Chạy trên Linux + gọi trực tiếp hạt nhân (rõ ràng). Có ai vui lòng giải thích điều gì đang thực sự xảy ra ở đây không? Tôi nghĩ rằng nó đọc các số nguyên trong bộ vi xử lý eax & ebx đăng ký & ecx, dữ liệu edx và xác định cuộc gọi hệ thống khi hạt nhân được gọi. Nếu vậy, các kết hợp khác nhau của các số nguyên có xác định các cuộc gọi hệ thống khác nhau khi int 0x80 được gọi không?
Tôi không tốt với các trang của người đàn ông, nhưng đã đọc mọi trang liên quan tôi có thể tìm thấy, có trang nào cho tôi biết kết hợp nào xác định những gì syscalls?
BẤT CỨ trợ giúp được đánh giá cao. Một lời giải thích từng dòng sẽ là tuyệt vời ... -Cảm ơn trước Jeremy
Cảm ơn bạn rất nhiều, đây là sự nghi ngờ và hữu ích của tôi ... Bạn có thể cho tôi biết nơi tôi có thể tìm hiểu thêm không? Các số nguyên syscall này có nằm trong các trang của người đàn ông không? – Jeremy
Bạn phải đào sâu vào các tệp tiêu đề nguồn của Linux để tìm các số gọi của hệ thống. Tôi không có một máy Linux tiện dụng vào lúc này vì vậy tôi không thể cho bạn biết vị trí chính xác, nhưng nó giống như 'include/asm/syscall.h' trong cây nguồn hạt nhân. –
cảm ơn bạn rất nhiều, bạn đã được v. Hữu ích. – Jeremy