![]() |
eXeL@B —› Программирование —› Вопрос про экспорт |
Посл.ответ | Сообщение |
|
Создано: 26 января 2013 22:32 · Личное сообщение · #1 |
|
Создано: 26 января 2013 22:50 · Поправил: -=AkaBOSS=- · Личное сообщение · #2 Promix_17 пишет: распаковать эти данные уже после загрузки в память и что тогда, по вашему, будет с файлами, у которых эта DLL находится в импорте? ![]() конечно же -- "Не найдена точка входа в процедуру 'xxxx' в модуле 'yyyy'" /ADD просмотрел справку по юпиксу. нашел это Code:
причины, по которым он не трогает DLL, не объясняются, но указана причина, по которой была введена эта опция - совместимость с Wine. Может, в этом дело? ![]() |
|
Создано: 26 января 2013 22:57 · Личное сообщение · #3 |
|
Создано: 26 января 2013 23:27 · Личное сообщение · #4 |
|
Создано: 27 января 2013 04:59 · Личное сообщение · #5 ARCHANGEL Отрицательный результат получим - будем знать всё. Если месседжбокс будет, еще неизвестно, смапится ли функция на динамический экспорт. (Типа, если винда делает LoadLibrary->GetProcAddress, то LoadLibrary даст месседжбокс, а вот GetProcAddress может обломаться). Вообще, вопрос интересный. В 5 утра не осилю написать тест, но если завтра никто не сделает, напишу тест ближе к ночи. ![]() |
|
Создано: 27 января 2013 09:46 · Личное сообщение · #6 В стандартном случае ничего там не обломается, что при загрузке длл статически, что динамически, происходит вызов точки входа, а потом парсится импорт в эту библиотеку. А вот с ехе другой вопрос, точки входа в статичные длл парсятся раньше ЕП ехе, т.е. теоретически они могут не найти экспорт в ехе. И в любом случае это не спасёт от ситуаций, если кто-то мапит руками или через апи без вызова точки входа и потом ожидает нормальный экспорт. ![]() |
|
Создано: 27 января 2013 15:43 · Личное сообщение · #7 По поводу ручной загрузки: если файл упакован, а точка входа вызываться не будет при загрузке, то толку от экспорта мало - код экспортируемых функций тоже будет упакован и вызывать их просто нельзя. Максимум, что можно извлечь из экспорта без вызова точки входа в упакованном файле - просто получить адреса функций. Но толку от них? Т.е. это очень очень специфическая ситуация, когда экспорт в упакованной длл лучше оставлять. ![]() |
|
Создано: 27 января 2013 16:27 · Личное сообщение · #8 А кто сказал, что они обязательно будут вызываться. Вызов сразу экспорта без вызова точки входа несколько нелогичен. А посмотреть на присутствие функций в экспорте могут вполне. Типа перечислить файлы в директории и поглядеть, какие из них экспортируют плагинные функции, скажем, чтобы составить список плагинов для юзера. А полноценно уже грузить, когда юзер ткнёт на конкретном плагине. Да, возможно, вариант не часто используется. Но могут быть и другие аналогичные варианты. Чтобы не удивлялись, когда длл отвалится после упаковки. ![]() |
|
Создано: 27 января 2013 17:08 · Личное сообщение · #9 tomac пишет: Типа, если винда делает LoadLibrary->GetProcAddress, то LoadLibrary даст месседжбокс, а вот GetProcAddress может обломаться Само по себе - да, но расчёт на то, что внутри DllMain делается реконструкция экспортов. Archer пишет: И в любом случае это не спасёт от ситуаций, если кто-то мапит руками или через апи без вызова точки входа и потом ожидает нормальный экспорт. Я так понял, что эти все операции нужны для загрузки упакованной библиотеки загрузчиком - не вручную. Т.е. такой сценарий не имеет места. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 30 января 2013 04:09 · Личное сообщение · #10 Некоторый резон не паковать экспорты таки есть. Я сталкивался с косяками. Какая-то из старых виндов (до XP) сначала чекала экспорт, а потом уже тягала DllMain. Скорее всего это было Win2k - оно вообще адово придиралось к исполнимым файлам. Причем в позу вставало вроде не всегда, а только в некоторых случаях (типа это COM dll и регается через RegSvr). Проще оказалось не паковать экспорт, чем разобраться с этим днищем. Продробностей не помню, извиняйте, это было 12 лет назад, когда я делал свой первый пакер. С другой стороны сейчас это скорее всего уже не актуально, и всё взлетит и с пожатым экспортом. В то время всё через задницу работало, даже .NET с диска себя тупо перечитывал - патчи в памяти сколько хочешь, но исполняться будет то, что на диске ![]() ![]() |
![]() |
eXeL@B —› Программирование —› Вопрос про экспорт |