2010-01-25 25 views
11

Có thể sử dụng lệnh gcc sử dụng int cho tất cả các cuộc gọi hệ thống chứ không phải sysenter? Câu hỏi này nghe có vẻ lạ nhưng tôi phải biên dịch một số dự án như Python và Firefox theo cách này.Làm thế nào để buộc gcc sử dụng int cho các cuộc gọi hệ thống, không phải sysenter?

Tóm tắt

Nhờ jbcreix, tôi đã tải về glibc 2,9 mã nguồn, và sửa đổi các dòng trong sysdeps/unix/sysv/Linux/i386/sysdep.h, để vô hiệu hóa sử dụng sysenter bởi #undef I386_USE_SYSENTER , Và nó hoạt động.

+3

dễ dàng, biên dịch lại thư viện C của bạn sau khi thay thế sysenter bằng int 80 trong syscall.s và liên kết lại. Đây không phải là trình biên dịch tạo ra mã có nghĩa là bạn may mắn. – jbcreix

+0

@jbcreix Cảm ơn vì điều đó. Bạn có thể đăng nó như một câu trả lời để tôi có thể chấp nhận câu trả lời? – ZelluX

Trả lời

2

Biên dịch lại thư viện C của bạn sau khi thay thế sysenter bằng int 80 trong syscall.s và liên kết lại.

Đây không phải là trình biên dịch tạo mã có nghĩa là bạn may mắn.

Nguồn gốc cuối cùng của syscall thực tế là ở đây, như OP nói:

http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/sysdep.h?root=libc&view=markup

Và như tôi nghi ngờ có thực sự là một syscall.S nó chỉ là nguồn glibc là một mê cung.

http://cvs.savannah.gnu.org/viewvc/libc/sysdeps/unix/sysv/linux/i386/syscall.S?root=libc&view=markup

Vì vậy, tôi nghĩ anh ấy đã làm đúng, asveikau.

+0

Tôi nghĩ rằng những ngày này "int 80h" hoặc "sysenter" xuất phát từ linux-gate.so được ánh xạ tới trang ma thuật bởi hạt nhân. Ít nhất là trên x86. – asveikau

1

Bạn không sửa đổi gcc; bạn sửa đổi libc (hoặc chính xác hơn, biên dịch lại nó) và hạt nhân. gcc không phát ra hướng dẫn sysenter; nó tạo ra các cuộc gọi đến giao diện syscall (2) chung, hiển thị một giao diện người dùng thống nhất cho mục nhập và thoát khỏi hệ thống.

Hoặc bạn có thể sử dụng Pentium; SYSENTER không được giới thiệu cho đến PII =]. Lưu ý liên kết KernelTrap sau đây cho các phương pháp thú vị được Linux sử dụng: http://kerneltrap.org/node/531

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