CaptainFlint

|
Posted: Tue Mar 23, 2010 19:38 Post subject: |
|
|
MVV wrote: | Ну подумай сам. Код модуля загружается в память, и все ее копии пользуют его как общий (по логике, второй и далее разы даже читать секцию кода из файла не надо, раз она уже есть в памяти). Но если одна из них загружается по отличному от базового адреса, система ее загрузит и внесет корректировки в ее код, т.е. он уже будет отличаться от кода тех копий, которые загружены по базовому адресу - как минимум, все инструкции call и jmp (кроме вызовов системных функций) будут содержать другие адреса (если быть точным, будет исправлен адрес в каждом месте, указанном в секции релокаций). |
Не понял, если библиотека уже загружена в память по некоторому адресу, нафига ж тогда её ещё раз грузить по другому адресу? Что-то у тебя с ног на голову всё повёрнуто. Вот твоя аргументация в сокращённом виде (поправь, если не так понял): система грузит вторую копию DLL по новому адресу, меняет указатели, адреса становятся другими, нельзя переиспользовать код, следовательно, придётся держать несколько копий. Так ведь эта цепочка рассуждений начинается как раз того, что по какой-то причине грузится вторая копия по новому адресу! Какие тут ещё могут быть доводы и обоснования? Мы предположили, что загрузилась новая копия, и на основе этого доказали, что новая копия загрузится. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|