2009-09-17 30 views
5

Khi tải các DLL bên ngoài (không nằm dưới sự kiểm soát của chúng ta) thông qua LoadLibrary, chúng ta đang gặp vấn đề mà CRT liên kết tĩnh trong các DLL đó không phân bổ lưu trữ cục bộ. Điều này tương tự như mskb 193462, ngoại trừ việc đây là FLS và chỉ có 128 trong số đó.Làm việc xung quanh các giới hạn fls với quá nhiều CRT liên kết tĩnh?

Có cách nào hữu ích để giải quyết sự cố không? Các CRT đang sử dụng GetProcAddress để tìm FlsAlloc anyway (kể từ đó dường như không bao giờ tồn tại trong XP), do đó, nó thậm chí thực sự cần nó?

(Đây là trên Vista, nơi FlsAlloc thực sự tồn tại; DLLs xuất hiện để được sử dụng MSVC8)

Trả lời

2

Có thẳng thắn là không có giải pháp ở đây, viết tắt của tải dlls ít hơn.

Bạn có thể nối bảng địa chỉ nhập của dll - nhưng điều đó sẽ xảy ra quá muộn vì bạn chỉ có thể cài đặt móc IAT khi LoadLibrary trả về, và mã khởi tạo CRT có thể thực hiện để đáp ứng với DllProcessAttach mà đã được xử lý.

Bạn có thể đoán tìm mô đun kernel32.dll trong bộ nhớ và vá địa chỉ xuất cho GetProcAddress hoặc có lẽ FlsAlloc để trỏ đến triển khai của bạn. Nhưng cách tiếp cận đó đang trở nên nghiêm túc.

+0

Đã đi với giải pháp tạm thời để cắt bỏ mọi thứ và hy vọng chúng ta không cần quá nhiều nữa: (Cố gắng vá FlsAlloc quá đáng sợ, mặc dù hầu hết các tệp DLL đó được tải trong thời gian chạy (thông qua LoadLibrary) khả thi. – Mook

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