Trình tạo mã .NET của Delphi phát ra IL dưới dạng bytecode trực tiếp vào bộ nhớ, giống như tạo mã x86, mặc dù có tiêu đề thích hợp, v.v. Tức là trình tạo mã phát trực tiếp byte, bảng ngoại lệ, v.v. . Nó không làm điều này với một API, mà là cách cũ: viết mã một byte tại một thời điểm.
Sau đó, trình liên kết tích hợp của Delphi hoạt động với IMetaDataEmit
v.v. để tạo siêu dữ liệu và IMetaDataEmit::SetRVA
để thông báo cho siêu dữ liệu nơi mã sẽ được đặt trong tệp thực thi. Siêu dữ liệu được sao chép với IMetaDataEmit::SaveToMemory
và sau đó được sao chép vào PE mà trình liên kết đã xây dựng, với tiêu đề CLR được vá tương ứng để trỏ tới bắt đầu siêu dữ liệu.
Đó là rất nhiều mã, một số khó sử dụng, vì phần lớn nó được nối qua trình liên kết x86 hiện có của Delphi, những thứ như tối ưu hóa chi nhánh và loại bỏ mã không sử dụng (liên kết thông minh). cần thiết cho .NET.
Nếu chúng tôi làm lại tất cả, chúng tôi có thể tránh các API .NET để tạo siêu dữ liệu và tạo toàn bộ nội dung ngay từ thông số. Các API đã kết thúc thành một hộp đen để tối ưu hóa và thêm vào một số lượng đáng kể thời gian biên dịch.
Nguồn
2010-07-12 20:20:45
Cảm ơn, Barry. –