Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Виталий, Вы писали:
CS>Не понял, а зачем эти пляски с бубном? CS>В чем смысл глубокий?
HtmLayout не прячу, чесс слово (Хотя работает, проверял)
Собственно говоря, я это для чего-то вроде защиты использую. Алгоритм следующий — длл с необходимым функционалом хитроумно шифруется и кладется в ресурсы. Когда требуется, расшифровывается, проверяется контрольная сумма и если все в порядке, то считаем эту область длл и спокойно с ней работаем. Очень удобно, да и реализуется за полчаса, причем никаких проблем с выполнением кода (это в преддверии SP2).
Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, Виталий, Вы писали:
F>[]
F>Интересует, как насчет поддерживаемых OC? А именно: Win9x, Win2000, Win NT 4.x, WinXP. На всех будет работать?
Лично мной проверялось на WinXP и Win98SE. Чисто террористически, упс теоретически должно на всех. Единственное, что нужно уточнить — у меня нет поддержки "forward export", как-то без надобности было
. И то же решение — копание в undoc'ах.
Угу, совершенно так + не поддерживаю "forward export", ну да его добавить строк по 5 в MemGetProcAddress и MemFreeLibrary. Более того, перед написанием статья даже внимательно читалась Только с исходниками не очень разобрался (там некоторые переменные используются, которые нигде не декларированны) и посему изобретал вилосипед, основываясь на "Inside Windows 2000", кстати говоря этой статьи вполне достаточно.
Именно для написания программы достаточно использовать один из источников, приведенных мною в списке ссылок. Но вот для того, чтобы быть уверенным в том, что делаем, приходится их сравнивать. Они, как я уже писал, иногда противоречат друг другу.
А с переменными и впрямь вышел конфуз. То есть, все это легко восстановимо из приведенных в статье рассуждений, но факт остается фактом — пару деклараций я действительно забыл
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, Виталий, Вы писали:
F>В С++ Builder 5.0 рушится на этом коде:
skip F>DLL самая простая, экспортирует только одну функцию, в которой выводится MessageBox. Где порылась собака? Или я чего не понял?
С первого взгляда должно работать . Не работает вообще никак или только при загрузке из ресурсов? Может дело в packing alignment, они кажись разные для VC и Билдера?
[]
В>С первого взгляда должно работать . Не работает вообще никак или только при загрузке из ресурсов?
Не работает и при использовании CreateFileMapping. Я из вашего примера взял.
В>Может дело в packing alignment, они кажись разные для VC и Билдера?
DLL тоже написана на Билдере, настройки проектов одинаковые... Вот сижу и огорчаюсь Идея класс, но как заставить ее работать под Билдером? Под VC буду юзать однозначно (думаю, там будет все ок). Any idea?
Здравствуйте, Flamer, Вы писали:
В>>С первого взгляда должно работать . Не работает вообще никак или только при загрузке из ресурсов?
F>Не работает и при использовании CreateFileMapping. Я из вашего примера взял.
В>>Может дело в packing alignment, они кажись разные для VC и Билдера?
F>DLL тоже написана на Билдере, настройки проектов одинаковые... Вот сижу и огорчаюсь Идея класс, но как заставить ее работать под Билдером? Под VC буду юзать однозначно (думаю, там будет все ок). Any idea?
Эт нужно поб билдером поотлаживать, чтоб что-нить умное сказать, а его-то у меня и нет.
[]
F>>DLL тоже написана на Билдере, настройки проектов одинаковые... Вот сижу и огорчаюсь В>Эт нужно поб билдером поотлаживать, чтоб что-нить умное сказать, а его-то у меня и нет.
Я не особо силен в формате PE, поэтому просто сидел и пошагово трейсил функцию MemLoadLibrary. Косяк возникает только на строчке вызова точки входа dll. Такое ощущение, что адрес немножко не тот.
Здравствуйте, Flamer, Вы писали:
F>Я не особо силен в формате PE, поэтому просто сидел и пошагово трейсил функцию MemLoadLibrary. Косяк возникает только на строчке вызова точки входа dll. Такое ощущение, что адрес немножко не тот.
А если ее просто не вызывать?
F>З.Ы. Завтра начну войну с Билдером
Здравствуйте, Виталий, Вы писали:
В>Здравствуйте, Flamer, Вы писали:
F>>Я не особо силен в формате PE, поэтому просто сидел и пошагово трейсил функцию MemLoadLibrary. Косяк возникает только на строчке вызова точки входа dll. Такое ощущение, что адрес немножко не тот.
В>А если ее просто не вызывать?
Тогда MemGetProcAddress проходит успешно, но при попытке вызова функции — обломс в виде старого приятеля AV...
А с вышеупомянутой статьей сравнивали? В чем отличия?
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[3]: Нашел багу
От:
Аноним
Дата:
12.03.04 22:16
Оценка:
Здравствуйте, Flamer, Вы писали:
F>В С++ Builder 5.0 рушится на этом коде:
F>
F>DLLMAIN dllMain=(DLLMAIN)(ImageBase+pOptionalHeader->AddressOfEntryPoint);
F> if (!dllMain((HMODULE)ImageBase, DLL_PROCESS_ATTACH, NULL))
F>
А я теперь знаю почему код рушится И даже не из-за того что это билдер.
Поглядите на preferred address вашей dll -ки, наверняка она перемещена из-за конфликта с другой dll-кой и тут и возникает баг.
Лечится либо с помощью rebase (временное пожарное решение), а лучше попросить автора, чтобы исправил багу.
очень уж интересуют результаты вашей борьбы с Билдером. Если ли результаты ?
спасибо
F>Я не особо силен в формате PE, поэтому просто сидел и пошагово трейсил функцию MemLoadLibrary. Косяк возникает только на строчке вызова точки входа dll. Такое ощущение, что адрес немножко не тот.
F>З.Ы. Завтра начну войну с Билдером
И думается мне, что это происходит из-за неправильного HINSTANCE (см. tmp___1). На самом деле, отладить это всё достаточно сложно — GetLastError() выдаёт NULL, вместа кода ошибки (видимо, это связано с тем, что вызов системных функций происходит через JMP'ы).
Madshi:
A simple MessageBox (without SysUtils) with only Windows.pas in the uses clause worked for me. But I had to set the image base address of your project to something high (I've chosen $60000000) and the image base address of the test exe to $10000000. It didn't work with $400000 because that address was already in use (didn't spend the time to find out why).
Но я пока ImageBase'ы не менял. Попробую потом (ибо хрен знает как это сделать под masm32).
В общем, нужно как-то решить проблему. Пока не знаю как. Но факт остаётся фактом — с обычной загрузкой глобальный хук работает, а с такой загрузкой (через этот PE Loader) — не работает.