2010-01-12 32 views
18

Thực thi thực sự có chứa gì? .. Nó có chứa các hướng dẫn để xử lý dưới dạng Opcode và Operands không? Nếu vậy tại sao chúng tôi có các tệp thi hành khác nhau cho các hệ điều hành khác nhau?Tệp thực thi có chứa những gì?

Trả lời

10

Có, mã ở dạng mã opcode và toán hạng, và dữ liệu của khóa học. Bất cứ điều gì bạn muốn làm điều đó liên quan đến hệ điều hành trong bất kỳ cách nào phụ thuộc vào hệ điều hành, không phải trên CPU. Đó là lý do tại sao bạn cần các chương trình khác nhau cho các hệ điều hành khác nhau. Việc mở một cửa sổ trong Windows không được thực hiện với cùng một chuỗi các hướng dẫn như trong Linux, v.v.

+2

Các lần thực thi có chứa siêu dữ liệu về chính chương trình mà hệ điều hành có thể sử dụng cho một số thứ. Tôi nghĩ rằng các tệp '.com' là phần còn lại cuối cùng của các chương trình thực thi chỉ là mã và dữ liệu mà hệ điều hành chỉ tải tệp vào bộ nhớ, trỏ IP lên đó và để nó chạy :-) – Joey

8

Khi unwind ngụ ý trong câu trả lời của mình, một tệp thi hành có chứa các cuộc gọi đến các thường trình trong Hệ điều hành. Nó sẽ là cực kỳ không hiệu quả cho một tập tin thực thi để cố gắng thực hiện các chức năng đã được cung cấp bởi hệ điều hành (ví dụ, ghi vào đĩa, chấp nhận đầu vào) để sử dụng nặng được thực hiện các cuộc gọi đến các chức năng hệ điều hành.

Hệ điều hành khác nhau cung cấp các chức năng tương tự nhưng chi tiết cách gọi để gọi các chức năng đó (và trong đó chúng) có thể khác nhau.

Vì vậy, ngoài những khác biệt chính của loại bộ xử lý, tệp thực thi được viết cho một hệ điều hành sẽ không hoạt động với một hệ điều hành khác.

4

Để thực hiện bất kỳ hình thức nào của IO, một tệp thực thi cần phải giao tiếp với Hệ điều hành bằng cách sử dụng các cuộc gọi sys. trong Windows đây là các cuộc gọi đến API Win32 và trên linux/đơn vị này chủ yếu là các cuộc gọi posix.

Hơn nữa, định dạng tệp thực thi khác với hệ điều hành giống như cách tệp PNG khác với tệp GIF. dữ liệu được sắp xếp theo thứ tự khác nhau và có các tiêu đề và tiêu đề phụ khác nhau.

+0

Trong Windows, hệ thống gọi lên API gốc, không phải API Win32. Win32 là một phần còn lại từ những ngày trước NT, và chỉ là một trình bao bọc xung quanh Native API. – wj32

+0

Đúng, ngoài thực tế là API gốc không được chính thức tài liệu và bạn không được sử dụng nó bao giờ hết. – shoosh

9

xử lý hiểu các chương trình về opcodes - vì vậy intution của bạn về thực thi chứa opcodes là đúng, và bạn đoán một cách chính xác rằng bất kỳ thực thi phải có opcodes và toán hạng để thực hiện chương trình trên một bộ xử lý. Tuy nhiên, các chương trình chủ yếu thực hiện với sự trợ giúp của hệ điều hành (bạn có thể viết chương trình không sử dụng hệ điều hành để thực thi, nhưng đó sẽ là rất nhiều công việc không cần thiết) - cung cấp abstractions trên phần cứng mà chương trình có thể sử dụng. Hệ điều hành có trách nhiệm thiết lập "ngữ cảnh" cho bất kỳ chương trình nào để chạy chương trình mà bộ nhớ cần, cung cấp các thư viện có mục đích chung mà chương trình có thể sử dụng để thực hiện các công cụ phổ biến như ghi vào tệp, in tới bảng điều khiển, v.v.

Tuy nhiên, để thiết lập ngữ cảnh cho chương trình (cung cấp bộ nhớ, tải dữ liệu, thiết lập ngăn xếp), hệ điều hành cần đọc tệp thực thi của chương trình và cần biết một số thông tin về chương trình như dữ liệu mà chương trình mong muốn sử dụng, kích thước của dữ liệu đó, các giá trị ban đầu được lưu trữ trong vùng dữ liệu đó, danh sách các opcodes tạo nên chương trình (còn gọi là vùng văn bản của quy trình), kích thước của chúng, v.v. dữ liệu này và nhiều hơn nữa (thông tin gỡ lỗi, dữ liệu chỉ đọc như các chuỗi được mã hóa cứng trong chương trình, các bảng biểu tượng, vv) được lưu trữ trong tệp thực thi.Mỗi hệ điều hành hiểu một định dạng khác của tệp thi hành này, vì chúng mong đợi tất cả thông tin này được lưu trữ trong tệp thực thi theo các cách khác nhau. Kiểm tra các liên kết được cung cấp bởi Groo.

Một vài định dạng đã được sử dụng để lưu trữ thông tin trong tệp thi hành là ELF và COFF trên hệ thống UNIX và PE trên Windows.

P.S. - Không phải tất cả các chương trình đều cần định dạng thực thi. Tra cứu bộ nạp khởi động trên Google. Đây là những chương trình đặc biệt chiếm lĩnh vực đầu tiên của phân vùng có khả năng khởi động trên đĩa cứng và được sử dụng để tải bản thân hệ điều hành.

0

Tệp thực thi chứa nhiều đốm dữ liệu và hướng dẫn về cách dữ liệu sẽ được tải vào bộ nhớ. Một số phần này xảy ra để chứa mã máy có thể được thực thi. Các phần khác chứa dữ liệu chương trình, tài nguyên, thông tin di chuyển, thông tin nhập, vv

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