Có cách nào để thêm một cuộc gọi hệ thống động, chẳng hạn như thông qua một mô-đun không? Tôi đã tìm thấy những nơi mà tôi có thể ghi đè cuộc gọi hệ thống hiện tại bằng mô-đun bằng cách chỉ thay đổi mảng sys_call_table[]
để nhận hàm được ghi đè thay vì nguồn gốc khi mô-đun của tôi được cài đặt, nhưng bạn có thể thực hiện điều này bằng cuộc gọi hệ thống mới và mô-đun không?Nhân Linux - thêm hệ thống gọi tự động qua mô-đun
Trả lời
Chặn cuộc gọi hệ thống hiện tại (để thực hiện điều gì đó trong hạt nhân) không đúng trong một số trường hợp. Ví dụ, nếu trình điều khiển không gian người dùng của bạn cần thực hiện một cái gì đó trong hạt nhân, hãy gửi một cái gì đó ở đó, hoặc đọc một cái gì đó từ hạt nhân? Thông thường cho các trình điều khiển, đúng cách là sử dụng cuộc gọi ioctl(), chỉ là một cuộc gọi hệ thống, nhưng nó có thể gọi các chức năng hạt nhân hoặc mô-đun trình điều khiển khác nhau - bằng cách truyền các tham số khác nhau thông qua ioctl().
Ở trên là để thực thi mã hạt nhân do người dùng kiểm soát.
Để truyền dữ liệu, bạn có thể sử dụng trình điều khiển procfs hoặc sysfs để nói chuyện với hạt nhân.
PS: khi bạn chặn cuộc gọi hệ thống, thường ảnh hưởng đến toàn bộ hệ điều hành, bạn phải lo lắng về cách giải quyết vấn đề làm việc đó một cách an toàn: nếu ai đó gọi nửa chừng cuộc gọi hệ thống và sau đó bạn sửa đổi/chặn mã?
Zach, có nó là tốt: D
Mặc dù sys_call_table có kích thước cố định, trong một số trường hợp có thể có vị trí miễn phí trong bảng
Nhìn liên kết này:
lxr.free-electron. com/nguồn/arch/x86/kernel/syscall_32.c
lxr.free-electrons.com/source/arch/x86/kernel/syscall_64.c
Thứ nhất kernel lấp đầy tất cả các vị trí của sys_call_table với một con trỏ đến sys_ni_syscall
Tại biên dịch, các tập tin asm/syscalls_32.h và asm/syscalls_64.h là tạo ra dựa trên các bảng sau:
lxr.free -electrons.com/source/arch/x86/syscalls/syscall_32.tbl
lxr.free-electrons.com/source/arch/x86/syscalls/syscall_64.tbl
Với một cái nhìn ngắn gọn tại các bảng y Bạn có thể thấy rằng một số vị trí sẽ tiếp tục trỏ đến sys_ni_syscall, ví dụ: vị trí 17, 31, 32, 35, ..., trong syscall_32.tbl vì chúng không được triển khai.
Do đó, nhiệm vụ duy nhất của chúng tôi là xác định các vị trí này và "đăng ký" syscall mới của chúng tôi.
tôi đặt một cái gì đó tương tự trên git tôi
https://github.com/MrN0body/rsysadd
- 1. Bảng gọi hệ thống trong hạt nhân Linux ở đâu?
- 2. Thêm một cuộc gọi hệ thống mới trong hạt nhân Linux 3.3
- 3. Có thể thêm cuộc gọi hệ thống qua LKM không?
- 4. Thực hiện các cuộc gọi/bẫy hệ thống trong nguồn hạt nhân Linux
- 5. Thay đổi số hệ thống hạt nhân linux
- 6. Bỏ qua cuộc gọi hệ thống
- 7. Tìm kiếm triển khai cuộc gọi hệ thống trên hạt nhân Linux
- 8. Gọi hệ thống trong ARM
- 9. C++ hệ thống linux lệnh
- 10. Gọi hệ thống Linux để tạo quy trình và luồng
- 11. Hệ thống con nhân của bộ nhân Linux: Độ chính xác và độ phân giải
- 12. hệ thống awk gọi
- 13. Làm thế nào để thực hiện cuộc gọi hệ thống của riêng tôi mà không biên dịch lại nhân Linux?
- 14. Mutex truy cập và hệ thống gọi
- 15. Hiệu suất trên cao của hệ thống con sự kiện Perf trong hạt nhân Linux
- 16. hệ thống C gọi mở/đọc/ghi/mở tự động và O_CREAT | O_EXCL
- 17. Linux reboot() gọi hệ thống: tại sao nó gọi do_exit (0) sau kernel_halt()?
- 18. Cuộc gọi hệ thống trên Windows
- 19. Đọc các sự kiện hệ thống tệp từ hạt nhân Linux mà không có Inotify
- 20. Hệ thống báo cáo lỗi Java tự động
- 21. Cuộc gọi hệ thống mà không cần chuyển ngữ cảnh?
- 22. Làm thế nào tôi có thể gọi hệ thống của Linux/UNIX trong golang
- 23. Nhận số IP trong Số Hệ thống Tự động (ASN)
- 24. Bảng gọi hệ thống Linux hoặc cheetsheet bằng ngôn ngữ assembly
- 25. Query trên Chọn hệ thống Gọi
- 26. reinitialize biến môi trường hệ thống rộng trong linux
- 27. móc khóa bàn phím hệ thống trên X dưới linux
- 28. Làm thế nào để cấm các cuộc gọi hệ thống, GNU/Linux
- 29. cờ cho st_mode gọi hệ thống stat
- 30. dừng tất cả các tác nhân trong một hệ thống mà không cần tắt hệ thống?
Tôi luôn luôn nghĩ rằng việc thêm các cuộc gọi hệ thống là một Nono, nhưng đó chỉ là tin đồn. – jdizzle
Có, việc thêm các cuộc gọi hệ thống là vô dụng đối với rootkit :) –
Việc thêm một syscall chắc chắn không được hỗ trợ. Có thể bạn muốn có một giải pháp mới cho vấn đề của mình. Tại sao bạn cảm thấy bạn cần một syscall mới? – stsquad