Такая ситуация, есть PE файл, он должен загружатся как exe и как dll, для экономии места я откзался от релоков и все оффсеты задал в коде динамически, но вот проблемма, если его загружать через LoadLibrary Загружается, но не вызывается Entry Point если не установен флаг длл в FileHeader.Characteristics Не загружается вообще если стоит флаг длл и нет секции релоков Как бы разумней решить эту проблемму? Просто секция релоков там совсем не к месту!
2FED а если экспортнуть функцию, которая будет делать то что в дллмайн, например, и вызвать ее самому?
2FED Релоки необходимы, память может быть занята. Проверку флагов не состовляет труда обойти. Оформляйте в виде пикода.
Не загружается вообще если стоит флаг длл и нет секции релоков Не ужели длл не может быть вообще без релоков, например какаянибудь библиотека FPU в которой код не требующий релокации. всмысле, как можно что то обойти если мой модуль даже не получает управление Что есть пикод?
P-код Например, Visual Basic до версии 6.0 включительно умел собирать исходник как в нейтив-код, так и в P-код.
2FED В котором вы используете дельтасмещения. В этом случае помещать код в модуль не имеет смысла. Изменить процесс загрузки, вмешавшись в лодер. x64
Читайте пост #1 А лодер поправить - это не всякому под силу. Поэтому, самое простое : А для экономии места есть масса методов - обычно выравнивание вредит...
valterg Врядле пустая секция поможет, думаю если отвалится LdrRelocateImage(), то загрузка не удастся. Необходимо не дать потоку вызвать это, как и говорил уже придётся лодер изменять, например отслеживать маппинг и сбрасывать код ошибки, либо выполнять манипуляции флажками(LDRP_*) или трассировать эту часть кода в LdrpMapDll(), вобщем способов куча - юзайте. Для чего это нужно не понятно(привязка к базе это зло).
Там же в FileHeader.Characteristics есть флаг Relocation Stripped - сбросьте оный и будет вам щастье.
Шелкод предназначен для эксплуатирования уязвимостей в системе типа переполнение буфера и т.п. - эксплоит короче Так что базонезависимый код вернее называть пи код.
d2k9 Назовём шелкодом код, который не содержит заканчивающих строку значений, корорый и юзается для переполнений. K10 Аналогично как и термин "хук". Вы называете совсем разные понятия одинаковыми именами, посему выражать свои мысли с помощью них слишком проблемно, всегда нужно уточнять. Вот лучше называть как решили - пикод и микод.
Extranger Спасибо, этот флаг то что мне было нужно! как я могу кудато вмешатся если код который должен исполнятся ещё не получил управление. Ещё такой попрос: когда мой модуль запускается и получает управление, ему надо знать загружен ли он как dll или как exe. Просто в случае с exe получаю imagebase из TEB'a а с dll из параметра dllmain, пока ещё не придумал как отличить тип загрузки.
2FED Код (Text): push 0 push esp Call @f @@: Call LdrFindEntryForAddress test eax,eax pop ecx .if !Eax test LDR_DATA_TABLE_ENTRY.Flags[ecx],LDRP_IMAGE_DLL ; 0x4 jz Exe ; else Dll ; ...