2009-10-24 51 views

Trả lời

10

Executables là các tập tin nhị phân được hiểu bởi hệ điều hành. Tệp thực thi sẽ chứa các phần có dữ liệu trong đó. Windows sử dụng số PE format. Định dạng PE có phần có hướng dẫn machine. Các hướng dẫn này chỉ là các số được sắp xếp theo trình tự và được CPU hiểu.

Một cuộc gọi chức năng để MessageBox(), sẽ là một chuỗi các hướng dẫn mà sẽ

1) có địa chỉ của hàm mà là trong một DLL. Địa chỉ này được đưa vào bởi trình biên dịch

2) hướng dẫn để "đẩy" các thông số vào một chồng

3) Chức năng thực tế cuộc gọi

4) một số loại làm sạch (phụ thuộc vào quy ước gọi).

Điều quan trọng cần nhớ là các tệp EXE chỉ là các tệp được định dạng đặc biệt. Tôi không có một tháo gỡ cho bạn, nhưng bạn có thể thử biên dịch mã của bạn, sau đó mở EXE của bạn trong phòng thu trực quan để xem việc tháo gỡ.

+0

Cảm ơn bạn đã trả lời, nhưng Wikipedia nói rằng tệp DLL cũng sử dụng định dạng PE. Tại sao vậy? –

+0

Và làm thế nào chính xác nó "đẩy" các thông số đó? Tôi biết từ PE Explorer rằng DLL lưu hàm và kích thước của các tham số của nó, ví dụ 8 byte có thể là int, int. –

+2

Một DLL cũng có thể chứa mã thực thi mà EXE có thể sử dụng tại thời gian chạy - do đó có tên là "thư viện liên kết động". –

-4

Nó phụ thuộc vào ngôn ngữ mà bạn đang làm việc. Nhưng đối với nhiều người nó cũng đơn giản như ...

msgbox("Your message goes here") 

hoặc

alert("Your message goes here") 
+3

Tôi không thực sự nghĩ rằng bạn hiểu được câu hỏi của mình, ý tôi là sau khi biên soạn, các hướng dẫn này trông như thế nào? –

2

Bất kỳ mã nào được viết (có thể bằng ngôn ngữ C hoặc một số ngôn ngữ khác) được biên dịch bởi một trình biên dịch sang một loại ngôn ngữ đặc biệt gọi là assembly (tốt, mã máy, nhưng chúng rất gần). Assembly là một ngôn ngữ cấp thấp, mà CPU thực thi nguyên bản. Thông thường, bạn không lập trình trong assembly vì nó quá thấp (ví dụ, bạn không muốn xử lý việc kéo bit qua lại từ bộ nhớ).

Tôi không thể nói cụ thể về chức năng MessageBox, nhưng tôi đoán đó là số LOT hướng dẫn. Hãy suy nghĩ về nó: nó phải vẽ hộp và tạo kiểu cho nó, tuy nhiên máy tính của bạn có phong cách và móc nối một trình xử lý thậm chí để một cái gì đó xảy ra khi người dùng nhấp vào nút, yêu cầu Windows (hoặc bất kỳ hệ điều hành nào) thêm nó vào taskbar (hoặc dock, vv), và rất nhiều thứ khác.

4

Đó là một câu hỏi cồng kềnh nếu tôi từng thấy. NHƯNG, tôi sẽ cố hết sức để đưa ra một cái nhìn tổng quan. Trong tệp thực thi nhị phân, có những thứ này được gọi là "mã byte", mã byte chỉ là sự represtation hex của lệnh. Thông thường, bạn có thể "tra cứu" các mã byte và chuyển đổi chúng thành các lệnh Assembly. Ví dụ: Các hướng dẫn:

mov ax, 2h 

Có đại diện mã byte:

B8 02 00 

Các mã byte được nạp vào RAM và thực hiện bởi các processer như đó là "ngôn ngữ" của nó.Không ai sane mà tôi biết các chương trình trong mã byte, nó sẽ chỉ là wayyyy phức tạp. Hội là ... đủ vui vẻ như nó được. Bất cứ khi nào bạn biên dịch một chương trình bằng một ngôn ngữ cấp cao hơn, nó phải lấy mã của bạn và biến nó thành các chỉ lệnh Assembly, bạn chỉ cần hình dung mã của bạn sẽ trông như thế nào sau khi nó biên dịch nó. Đừng làm cho tôi sai, trình biên dịch là rất tốt, nhưng tháo rời một chương trình C++ với IDA Pro miễn phí và bạn sẽ thấy những gì tôi đang nói về. Đó là thực thi trong một nutshell, chắc chắn có cuốn sách được viết về chủ đề này. Tôi không phải là chuyên gia về Windows API, nhưng một người khác có thể cho bạn biết hướng dẫn sẽ trông như thế nào khi gọi WindowsBox là "MessageBox". Nó chỉ nên là một vài dòng hội.

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