Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание dll на лету 
:(
    Опции темы
Kero
  Дата 17.4.2010, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

Репутация: нет
Всего: 1



Привет!
У меня очень интересная задача на лабораторную работу:
"Во время выполнения программы: создать DLL файл, записать в него функцию переноса по слогам и вызвать ее".
Тоесть необходимо создать программу которая делает библиотеку и записывает в нее функцию.
Мне убогому, разбалованному C# и прочими вкусностями, не понятно как на лету делать библиотеки.
Прошу помощи знатоков)))

PM MAIL ICQ MSN   Вверх
jonie
Дата 17.4.2010, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Kero, вам определенно нужен компилятор и линковщик для этих целей в неуправлямом коде...
так просто ничего не получится... разве что если задание не меняется то:
1) сделать длл-ку
2) запихать ее в ресурсы
3) считать с них и записать на диск
4) загрузить (LoadLibrary) и получить адрес экспортной функции (GetProcAddress)
5) и вызвать то что получили в п.4


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Kero
Дата 17.4.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

Репутация: нет
Всего: 1



Цитата(jonie @ 17.4.2010,  19:03)
Kero, вам определенно нужен компилятор и линковщик для этих целей в неуправлямом коде...
так просто ничего не получится... разве что если задание не меняется то:
1) сделать длл-ку
2) запихать ее в ресурсы
3) считать с них и записать на диск
4) загрузить (LoadLibrary) и получить адрес экспортной функции (GetProcAddress)
5) и вызвать то что получили в п.4

Насколько я понимаю можно както так сделать:
1) Сотворить функцию А в коде екзешки В, и запустить екзешку.
2) Екзешка В выполняеться прописывает стандартный заголовок в файл 1.длл (не могу понять как получить стандартный заголовок для библиотек)
3) Екзешка В сама себя сканирует и какимто ( вот каким образом?) получает начальный и конечный адресс функции А, записывает в файл 1.длл в таблицу функций сигнатуру функции А и бинарным копированием копирует бинарный образ функции А в файл 1.длл

Вопросы:
1) Такое вообще возможно?
2) Если да то каким образом получить начальный и конечный адресс функции в екзешке?
3) Каким образом записать таблицу функций в длл файл?
4) Возможно ли копирование функции с екзешки в дллку?
PM MAIL ICQ MSN   Вверх
xvr
Дата 17.4.2010, 21:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Будьте проще, и люди к вам потянутся  smile Сгенерируйте текст на С (или С++) и позовите MS компилятор (только не студию, а компилятор командной строки  smile ) Он вам сделает вашу dll в лучшем виде

Извлекать функцию из exe'ника и переписывать ее в dll путь явно тупиковый - нет никакой гарантии, что функция заработает, т.к. все ссылки, что торчат из функции (глобальные переменные, вызовы других функций, вызовы функций в других dll, да и наконец банальные релокации) скопированны не будут.

PM MAIL   Вверх
12usver12
Дата 17.4.2010, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 5.1.2007

Репутация: 1
Всего: 1



скорей всего или автор неправильно понял задание в данном контексте или оно очень криво сформулировано, сомневаюсь чтоб такие задания давали на лабораторные...

может все-таки речь не идет о неуправляемом коде... скорей всего об управляемом коде тогда -> using System.CodeDom.Compiler;
PM MAIL   Вверх
0x00
Дата 20.4.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



0. сначала пишеш саму длл
1. переводиш длл в массив байт
2. массив байт вставляеш в свою программу
3. из своей программы записываеш массив байт на диск
4. подключаеш созданный файл функцией loadlibrary
5. экспортируеш из него функцию
6. работаеш с ней
PM MAIL   Вверх
Kero
Дата 20.4.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

Репутация: нет
Всего: 1



Цитата(12usver12 @ 17.4.2010,  23:05)
скорей всего или автор неправильно понял задание в данном контексте или оно очень криво сформулировано, сомневаюсь чтоб такие задания давали на лабораторные...

может все-таки речь не идет о неуправляемом коде... скорей всего об управляемом коде тогда -> using System.CodeDom.Compiler;

Нет Нет. Я уточнял. Именно о неуправляемом коде идет речь.

Добавлено через 1 минуту и 17 секунд
Цитата(0x00 @ 20.4.2010,  12:40)
0. сначала пишеш саму длл
1. переводиш длл в массив байт
2. массив байт вставляеш в свою программу
3. из своей программы записываеш массив байт на диск
4. подключаеш созданный файл функцией loadlibrary
5. экспортируеш из него функцию
6. работаеш с ней

Если бы было всё так просто.
В задании:
 необходимо запустить 3 потока последовательно:
1) записывает РЕ заголовок в длл
2) записывает функцию в длл
3) вызывает эту функцию с длл
PM MAIL ICQ MSN   Вверх
GoldFinch
Дата 20.4.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



Kero, это же последовательные операции, зачем их выносить в разные потоками? всеравно одни одновременно не смогут работать

Цитата(Kero @  20.4.2010,  13:50 Найти цитируемый пост)
записывает функцию в длл

а каком виде должна быть функция? базонезависимый код (шеллкод) на асме?
PM MAIL ICQ   Вверх
0x00
Дата 20.4.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Цитата(Kero @ 20.4.2010,  13:50)
Цитата(12usver12 @ 17.4.2010,  23:05)
скорей всего или автор неправильно понял задание в данном контексте или оно очень криво сформулировано, сомневаюсь чтоб такие задания давали на лабораторные...

может все-таки речь не идет о неуправляемом коде... скорей всего об управляемом коде тогда -> using System.CodeDom.Compiler;

Нет Нет. Я уточнял. Именно о неуправляемом коде идет речь.

Добавлено @ 13:52
Цитата(0x00 @ 20.4.2010,  12:40)
0. сначала пишеш саму длл
1. переводиш длл в массив байт
2. массив байт вставляеш в свою программу
3. из своей программы записываеш массив байт на диск
4. подключаеш созданный файл функцией loadlibrary
5. экспортируеш из него функцию
6. работаеш с ней

Если бы было всё так просто.
В задании:
 необходимо запустить 3 потока последовательно:
1) записывает РЕ заголовок в длл
2) записывает функцию в длл
3) вызывает эту функцию с длл

тогда так:

0. сначала пишеш саму длл
1. переводиш длл в массив байт
2. отделяеш пе заголовок из массива
3. оставшийся массив байт вставляеш в свою программу
4. из своей программы составляеш пе заголовок, дописываеш массив байт
5. записываеш все на диск
6. подключаеш созданный файл функцией loadlibrary
7. экспортируеш из него функцию
8. работаеш с ней

тут только использованием шелл кода можно решить задачу

Это сообщение отредактировал(а) 0x00 - 20.4.2010, 15:05
PM MAIL   Вверх
GoldFinch
Дата 20.4.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



Цитата(0x00 @  20.4.2010,  15:03 Найти цитируемый пост)
тут только использованием шелл кода можно решить задачу

если сначала сделать длл, а потом выдрать оттуда функцию, то можно взять и релоки для этой функции

Это сообщение отредактировал(а) GoldFinch - 20.4.2010, 15:11
PM MAIL ICQ   Вверх
12usver12
Дата 20.4.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 5.1.2007

Репутация: 1
Всего: 1



Цитата

тогда так:

0. сначала пишеш саму длл
1. переводиш длл в массив байт
2. отделяеш пе заголовок из массива
3. оставшийся массив байт вставляеш в свою программу
4. из своей программы составляеш пе заголовок, дописываеш массив байт
5. записываеш все на диск
6. подключаеш созданный файл функцией loadlibrary
7. экспортируеш из него функцию
8. работаеш с ней


ето шото слишком все просто , а кто будет таблицу импорта настраивать если функция, которую нужно вставить ссылается на другие Winapi функи  отсутствующие в исходной длл 
PM MAIL   Вверх
GoldFinch
Дата 20.4.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



12usver12, это детали реализации, зависящие от кода функции в длл
PM MAIL ICQ   Вверх
0x00
Дата 20.4.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 3.4.2006

Репутация: нет
Всего: нет



Цитата(12usver12 @ 20.4.2010,  15:24)
Цитата

тогда так:

0. сначала пишеш саму длл
1. переводиш длл в массив байт
2. отделяеш пе заголовок из массива
3. оставшийся массив байт вставляеш в свою программу
4. из своей программы составляеш пе заголовок, дописываеш массив байт
5. записываеш все на диск
6. подключаеш созданный файл функцией loadlibrary
7. экспортируеш из него функцию
8. работаеш с ней


ето шото слишком все просто , а кто будет таблицу импорта настраивать если функция, которую нужно вставить ссылается на другие Winapi функи  отсутствующие в исходной длл

это просто микроплан на работу.
реальная же работа (ТЗ) 9 шагами не ограничится.
PM MAIL   Вверх
assasincore
Дата 20.4.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 13.4.2010

Репутация: нет
Всего: нет



Качай формат PE от мелкомягких и кури его....
Возьми open source "сборищик PE" все... (Инсталлер "nsis setup" , упаковщик "yoda cryptor", PE View, можеш компилер попробывать если получится "nasm")
Ну а код в машинных инструкциях, если хоч, может прикрутить assembler. 
PM MAIL   Вверх
nmn
Дата 21.4.2010, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



это же где такие лабораторные работы? smile
PM Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1636 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.