Tôi muốn thêm cuộc gọi hệ thống mới qua LKM, nhưng tôi không chắc chắn cách thực hiện điều này. Đó là, tôi biết rằng nếu tôi muốn thêm một cuộc gọi hệ thống hoàn toàn mới, tôi có thể xem qua sys_call_table và tìm một số sys_ni_syscall
và chỉ thay thế nó, nhưng tôi tò mò nếu có thể thực sự thêm vào sys_call_table
. Tôi nhận ra rằng có lẽ không phải là có thể, vì đó là một mảng kích thước cố định, nhưng tôi đã tự hỏi liệu có cách nào khác để thêm cuộc gọi hệ thống mà không ghi đè số cuộc gọi hệ thống không được sử dụng.Có thể thêm cuộc gọi hệ thống qua LKM không?
Trả lời
Kiểm tra trang web Dự án Tài liệu Linux cho "Hướng dẫn lập trình mô-đun hạt nhân Linux" (http://www.tldp.org/LDP/lkmpg/2.6/html/index.html). Cụ thể, hãy xem tại đây cho Cuộc gọi hệ thống: http://www.tldp.org/LDP/lkmpg/2.6/html/x978.html. Điều đó sẽ cho bạn một sự khởi đầu, ít nhất.
Đọc qua điều đó, mặc dù có vẻ như sys_call_table là không còn được xuất trong hạt nhân 2.6. Xem nhận xét trong syscall.c – FreeMemory
Dưới đây là một ví dụ
linux system calls
chỉnh sửa:
Ví dụ trên cho thấy howto thực hiện một cuộc gọi hệ thống, theo như thực hiện một từ một mô-đun có thể nạp được; AFAIK, điều đó là không thể, trừ khi bạn ghi đè lên hiện tại vì kích thước của mảng là #define.
Hãy nhớ rằng cũng có những thay đổi về không gian người dùng được yêu cầu, ít nhất là nếu bạn muốn thực sự có thể sử dụng cuộc gọi hệ thống mới.
Đây là câu hỏi cũ nhưng tôi vẫn muốn đề xuất giải pháp của mình. Cách dễ nhất để triển khai môi trường "gọi hệ thống" là dựa vào thiết bị giả. Cụ thể, bạn có thể tạo trình điều khiển thiết bị mới không thực sự thúc đẩy bất kỳ điều gì. Tuy nhiên, bằng văn bản về nó, có thể gây ra các mô-đun được cài đặt để thực hiện các hành động cần thiết. Ngoài ra, nếu bạn muốn cung cấp một số dịch vụ, bạn có thể ánh xạ chúng tới các hoạt động ioctl
.
- 1. Bỏ qua cuộc gọi hệ thống
- 2. Cuộc gọi hệ thống trên Windows
- 3. Cuộc gọi hệ thống mà không cần chuyển ngữ cảnh?
- 4. Hệ thống Perl có thể gọi bao giờ chết không?
- 5. Truy tìm cuộc gọi hệ thống chặn C
- 6. Nhân Linux - thêm hệ thống gọi tự động qua mô-đun
- 7. Điều gì có thể khiến các cuộc gọi hệ thống Perl bắt đầu thất bại?
- 8. Nhận hệ thống phân cấp cuộc gọi trong java
- 9. Tôi có thể tìm mã nguồn cuộc gọi hệ thống ở đâu?
- 10. Có cần phải đặt lại fd_set giữa cuộc gọi hệ thống được chọn không?
- 11. fork() - nhiều quy trình và cuộc gọi hệ thống
- 12. Diện tích dữ liệu thông qua một cuộc gọi hệ thống là quá nhỏ"
- 13. Cách theo dõi quy trình cho cuộc gọi hệ thống?
- 14. Thêm một cuộc gọi hệ thống mới trong hạt nhân Linux 3.3
- 15. về ngã ba và thực hiện cuộc gọi hệ thống
- 16. Đây có phải là cách hay để chặn cuộc gọi hệ thống không?
- 17. Có phiên bản của cuộc gọi hệ thống wait() đặt thời gian chờ không?
- 18. Android: export = "false" có hạn chế các cuộc gọi/truy cập hệ thống không?
- 19. Gọi hệ thống trong ARM
- 20. hệ thống awk gọi
- 21. Có thể vượt qua cuộc gọi qua dấu chấm lửng qua trực tiếp không?
- 22. Có phải Fragment.setUserVisibleHint() được gọi bởi Hệ thống Android không?
- 23. Mutex truy cập và hệ thống gọi
- 24. Cuộc gọi qua các trang web không có JSONP
- 25. Trong Perl, làm thế nào tôi có thể chặn cho một loạt các cuộc gọi hệ thống để kết thúc?
- 26. Cách thực hiện cuộc gọi hệ thống và đọc stdout, trong D?
- 27. Chụp cả trạng thái thoát và đầu ra từ một cuộc gọi hệ thống trong R
- 28. Ẩn kiểm tra đơn vị từ Hệ thống phân cấp cuộc gọi
- 29. Thực hiện các cuộc gọi/bẫy hệ thống trong nguồn hạt nhân Linux
- 30. Tạo các lệnh vỏ vệ sinh hoặc các cuộc gọi hệ thống trong Ruby
Có thể trùng lặp [Thực hiện cuộc gọi hệ thống Linux bằng LKM] (https://stackoverflow.com/questions/12623066/implementing-linux-system-call-using-lkm) –