2008-10-08 39 views
9

Chúng tôi có một dự án với nhiều tệp dll được tải khi ứng dụng bắt đầu. Các baseaddresses của các tập tin dll làm chồng lên nhau để hình ảnh bộ nhớ được di dời. Có khả năng để gán các baseaddresses tự động hoặc một cách để tính toán một baseaddress "tốt" cho mỗi tập tin dll?Làm cách nào để đặt/baseaddress thành giá trị "tốt"?

Trả lời

7

Bạn có thể sử dụng tiện ích rebase mà tàu với SDK nền tảng và với Visual studio Tôi nghĩ rằng để thiết lập địa chỉ cơ sở của một bó toàn bộ DLL nạp bởi appliction

Bạn cung cấp rebase với một danh sách các DLL tạo nên chương trình của bạn, không bao gồm các dll hệ thống, sau đó thực hiện tải giả của tất cả các tệp DLL và gán cho chúng các địa chỉ cơ sở mới.

Điều này có thể được thực hiện như một phần của bước xây dựng cuối cùng.

Có một bài viết Dr Dobbs trên rebasing here và một bài báo của Microsoft trên rebasing nói chung here

+1

Tôi phát hiện ra rằng tôi chỉ có thể gọi REBASE.EXE -d -b 0x60000000 * .dll để thực hiện việc này. – frast

3

Nếu bạn đang phân phối các DLL, bất kể cách bạn thiết lập địa chỉ cơ sở của bạn, luôn luôn có một rủi ro mà DLL khác không được viết bởi bạn được tải tại địa chỉ đó đã có (ví dụ như global hooks DLLs).

Ngoài ra nếu bạn đang xây dựng cho Vista bạn thực sự nên sử dụng/DYNAMICBASE để cho phép ASLR để kick trong

Dưới đây là liên kết MSDN:. http://msdn.microsoft.com/en-us/library/bb384887.aspx.

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