0X00 LÀ GÌ

  -  

Nó vượt qua điều khiển để ngắt vectơ 0x80

Xem http://en.wikipedia.org/wiki/Interrupt_vector

Trên Linux, hãy xem điều này : nó được sử dụng để xử lý system_call. Tất nhiên trên một hệ điều hành khác, điều này có thể có nghĩa là một cái gì đó hoàn toàn khác.

Bạn đang xem: 0x00 là gì


YudaPrawira: bạn nên nghĩ đến các hướng dẫn trước đó như thiết lập args trong thanh ghi và int 0x80như một kiểu đặc biệt của callmột hàm trong hạt nhân (được chọn bởi eax).

intnghĩa là ngắt, và number 0x80là số ngắt. Một ngắt chuyển luồng chương trình cho bất kỳ ai đang xử lý ngắt đó, ngắt 0x80trong trường hợp này. Trong Linux, 0x80trình xử lý ngắt là hạt nhân và được sử dụng để thực hiện các cuộc gọi hệ thống tới hạt nhân bởi các chương trình khác.

Kernel được thông báo về lệnh gọi hệ thống mà chương trình muốn thực hiện, bằng cách kiểm tra giá trị trong thanh ghi %eax(cú pháp AT&T và EAX trong cú pháp Intel). Mỗi lệnh gọi hệ thống có các yêu cầu khác nhau về việc sử dụng các thanh ghi khác. Ví dụ: giá trị 1in %eaxcó nghĩa là một lệnh gọi hệ thống exit()và giá trị trong %ebxgiữ giá trị của mã trạng thái cho exit().


— Polat Tuzla nguồn
47

Hãy ghi nhớ rằng 0x80=80h =128

Bạn có thể thấy ở đây mà INTchỉ là một trong rất nhiều hướng dẫn (thực sự là đại diện hội Ngôn ngữ (hay tôi nên nói "ghi nhớ") của nó) mà tồn tại trong tập lệnh x86. Bạn cũng có thể tìm thêm thông tin về hướng dẫn này trong sách hướng dẫn riêng của Intel tại đây .

Tóm tắt từ PDF:

INT n / INTO / INT 3 — Thủ tục gọi đến ngắt

Lệnh INT n tạo ra một cuộc gọi tới trình xử lý ngắt hoặc ngoại lệ được chỉ định với toán hạng đích. Toán hạng đích chỉ định một vectơ từ 0 đến 255, được mã hóa dưới dạng giá trị trung gian 8 bit không dấu. Lệnh INT n là cách ghi nhớ chung để thực hiện lệnh gọi do phần mềm tạo ra tới trình xử lý ngắt.

Như bạn có thể thấy 0x80toán hạng đích trong câu hỏi của bạn. Tại thời điểm này, CPU biết rằng nó sẽ thực thi một số mã nằm trong Kernel, nhưng mã nào? Điều đó được xác định bởi Vectơ ngắt trong Linux.

Xem thêm: Vân Vận Đấu Phá Thương Khung Ý Tưởng, Đấu Phá Thương Khung

Một trong những ngắt phần mềm DOS hữu ích nhất là ngắt 0x21. Bằng cách gọi nó với các tham số khác nhau trong thanh ghi (chủ yếu là ah và al), bạn có thể truy cập các hoạt động IO khác nhau, đầu ra chuỗi và hơn thế nữa.

Hầu hết các hệ thống Unix và các dẫn xuất không sử dụng ngắt phần mềm, ngoại trừ ngắt 0x80, được sử dụng để thực hiện các cuộc gọi hệ thống. Điều này được thực hiện bằng cách nhập giá trị 32-bit tương ứng với một chức năng hạt nhân vào thanh ghi EAX của bộ xử lý và sau đó thực thi INT 0x80.

Vui lòng xem điều này, nơi các giá trị có sẵn khác trong bảng trình xử lý ngắt được hiển thị:

*

Như bạn có thể thấy bảng chỉ CPU để thực hiện lệnh gọi hệ thống. Bạn có thể tìm thấy bảng Cuộc gọi Hệ thống Linux tại đây .

Vì vậy, bằng cách di chuyển giá trị 0x1 vào thanh ghi EAX và gọi INT 0x80 trong chương trình của bạn, bạn có thể làm cho quá trình thực thi mã trong Kernel sẽ dừng (thoát) quá trình đang chạy hiện tại (trên Linux, CPU Intel x86).

Không được nhầm lẫn ngắt phần cứng với ngắt phần mềm. Đây là một câu trả lời rất tốt về vấn đề này.

Xem thêm: Cách Mặc Đồ Ngũ Hành Các Môn Phái Vltk 1 Mobile, Game Võ Lâm Thiên Tuyệt Mobile

Đây cũng là một nguồn tốt.


Hầu hết các hệ thống Unix và các dẫn xuất không sử dụng ngắt phần mềm (ngoại trừ int 0x80) có vẻ như là một cách nói kỳ lạ. Các int 0x80i386 hệ thống Linux gọi ABI là cực kỳ giống với DOS int 0x21ABI. Đặt một số cuộc gọi vào một thanh ghi (AH cho DOS, EAX cho Linux) và các args khác trong các thanh ghi khác, sau đó chạy một lệnh ngắt phần mềm. Sự khác biệt chính là ở những gì mà các lệnh gọi hệ thống cho phép bạn thực hiện (truy cập trực tiếp vào phần cứng trong DOS chứ không phải Linux) chứ không phải ở cách bạn gọi chúng.
— Peter Cordes