2013-06-20 32 views
8

Tôi muốn thực hiện cuộc gọi hệ thống của riêng mình. (Xem bên dưới liên kết)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?

http://www.tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

Nhưng thêm cuộc gọi hệ thống mới đòi hỏi biên dịch kernel.

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 cần biên dịch lại nhân Linux?

Trả lời

14

Bạn không thể.

Không biên dịch lại hạt nhân, tất cả những gì bạn có thể làm là xây dựng và nạp các mô-đun hạt nhân, và các mô-đun hạt nhân không thể thêm các cuộc gọi hệ thống mới.

+1

Vâng đó là ngắn và ngọt ngào. – BoBTFish

+1

Vâng, về mặt kỹ thuật, tùy thuộc vào không gian và như vậy, với một mô-đun hạt nhân, bạn có thể vá cuộc gọi hệ thống của riêng bạn vào bảng gọi hệ thống hiện có. Nhưng nó lộn xộn, không đáng tin cậy và chắc chắn không phải là một ý tưởng hay. –

+0

Về mặt kỹ thuật, IOCTL là một cuộc gọi hệ thống. Vì vậy, khi bạn có thể sử dụng nó để bọc dữ liệu của bạn và nói chuyện trên người dùng và hạt nhân đất đai, tại sao bạn sẽ thêm một cuộc gọi hệ thống mới? – Ash

3

Chắc chắn, bạn có thể.

Tóm lại, bạn cần phải vá hạt nhân đang chạy.

Có ít nhất 2 cách để thêm một syscall mới:

  1. Mở rộng các bảng hiện có hệ thống gọi (sys_call_tableia32_sys_call_table) và hệ thống vá cuộc gọi hướng dẫn kiểm tra giới hạn (usally cmp trên x86) tại bất kỳ các mục gọi hệ thống (system_call, ia32_system_all vv ...)
  2. Sao chép các bảng gọi hệ thống hiện có, mở rộng chúng khi cần, hướng dẫn gửi lệnh hệ thống bản vá (usally call trên x86) để trỏ đến lệnh kiểm tra giới hạn cuộc gọi của bản sao và bản vá của bảng tại bất kỳ mục nhập cuộc gọi hệ thống nào.

Xem này anwers để biết chi tiết:

Implementing Linux System Call using LKM

How do 32-bit applications make system calls on 64-bit Linux?

:)

+1

Phương pháp bạn mô tả cực kỳ xấu xí và không an toàn - trừ khi bạn vô cùng cẩn thận về nó, có một cơ hội đáng kể là nó sẽ làm hỏng máy khi nạp. Trong mọi trường hợp, tôi sẽ xem xét sử dụng một mô-đun đã làm điều đó trên một hệ thống sản xuất. – duskwuff

+1

Đối với phương pháp, nó hoạt động nhưng các vấn đề thực hiện, bạn là đúng. Thực hiện đúng yêu cầu kỹ năng mạnh mẽ và nhiệm vụ này không phải cho suckers :) –

Các vấn đề liên quan