Tôi đang nói về win32 dlls, những tập tin pe đồng bằng. Tôi đang bối rối sau khi tôi làm một bài kiểm tra so với những gì tôi thấy trong quá trình explorer.exe.Chúng ta có thể có 2 DLL cùng tên đang được nạp trong một quá trình
Tôi đã viết một bài kiểm tra với các module sau: (C++)
DLLLoader.exe liên kết đến A.dll trong cùng một thư mục.
B.dll liên kết đến A.dll (2) trong một thư mục khác. (A.dll (2) là một DLL hoàn toàn khác nhau từ A.dll, nhưng có cùng tên)
DLLLoader.exe sẽ tải B.dll một cách rõ ràng thông qua :: LoadLibrary.
Bây giờ tôi bắt đầu DllLoader.exe, trước tiên, A.dll sẽ được tải, nhưng sau đó khi nó cố gắng để tải B.dll, Nó chỉ thất bại: Tôi nghi ngờ đó là bởi vì B.dll nghĩ rằng A.dll đã được nạp trong quá trình , nhưng trên thực tế, một nạp không phải là một trong những B.dll muốn, bảng nhập khẩu/xuất khẩu không thể phù hợp, do đó, B.dll là không tải được.
Điều này dường như cho chúng tôi biết chúng tôi không thể tải 2 dll cùng tên trong cùng một quá trình, ngay cả khi chúng có đường dẫn khác nhau.Nhưng khi tôi sử dụng quá trình thám hiểm để giám sát các module được nạp trong quá trình Windows explorer.exe, tôi có thể nhìn thấy sau 2 dlls được nạp, với cùng một tên:
comctl32.dll Kinh nghiệm kiểm soát người dùng thư viện C: \ WINDOWS \ WinSxS ... \ comctl32.dll
comctl32.dll Common Controls Library C: \ WINDOWS \ system32 \ comctl32.dll
bất kỳ của bạn có thể đổ một số đèn về điều này?
Để hạn chế tải (dựa trên phụ thuộc DLL), chúng tôi chỉ có thể có 1 dll được tải cùng tên. –