Sau khi Rebasing chương trình chính rất cao trong cơ sở hình ảnh riêng của nó.C++ Cách kiểm soát cơ sở hình ảnh của API LoadLibrary
Làm thế nào để đảm bảo rằng các dll đó được nạp sẽ được tải trong 0x400000
dllImageBase = LoadLibrary("test.dll");
printf("imagebase = 0x%x", dllImageBase);
Tôi luôn luôn có được 0x460000 thay vì 0x400000
tôi cần hướng dẫn đầu tiên dll của tôi bắt đầu từ 0x401000, nó được sử dụng để bắt đầu từ 0x600000 trước rebasing
lệnh cho mối liên kết để rebase là
#pragma comment(linker, "/BASE:8000000")
Vì vậy, 0x400000 thực sự là miễn phí ngay bây giờ nhưng nó không sử dụng nó theo mặc định .. vì vậy bất kỳ cách nào tôi có thể kiểm soát nó, nơi nó sẽ di dời. Một số WIN32API có thể?
Làm thế nào để bạn biết '0x400000' là miễn phí? Một số DLL khác có thể ở đó. –
Tôi nhìn vào bản đồ bộ nhớ và tiêu đề .code/PE của chương trình bắt đầu tại '0x8000000' .. và trước khi nó là' 0x3300000' chỉ là sortbls.nls và nó chỉ tiếp tục thấp hơn và không có gì thực sự đang sử dụng '0x4000000'. Nhưng những gì bạn đang nói một nơi nào đó trong tương lai nó sẽ phá vỡ bởi một số tai nạn quái dị yeah? thats nếu tôi con số nó ra làm thế nào để thiết lập quá 0x4000000. Sau đó, một lần nữa nếu tôi bằng cách nào đó tìm ra cách để kiểm soát này, họ sẽ không bao giờ tải có một lần nữa – SSpoke
Tôi không biết bất kỳ cách nào để kiểm soát điều đó. Nếu mã của bạn phụ thuộc vào một DLL cụ thể sống tại một địa chỉ cụ thể, nó bị hỏng. Đơn giản như vậy (ví dụ: x64 Windows cố gắng ngẫu nhiên hóa các địa chỉ mà tại đó các DLL khác nhau được tải dưới dạng biện pháp bảo mật). –