ЗАМАНЧИВО РАЦИОНАЛЬНО ПОЛЕЗНО

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

ЗАМАНЧИВО РАЦИОНАЛЬНО ПОЛЕЗНО

Сообщение MOV » 12.06.2004 (Сб) 18:41

Было бы, если бы я смог байтовый массив представляющий собой программу (экзэшник) запутить на выполнение прямо из памяти :?
Как? :shock:

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2056
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 12.06.2004 (Сб) 20:00


ЕСТЬ ФАЙЛ РЕСУРСОВ, В КОТОРОМ ХРАНИТСЯ ЭКЗЕШНИК.
ЧТОБЫ ЗАПУСТИТЬ ЭТОТ ЭКЗЕШНИК МНЕ ПРИХОДИТСЯ СНАЧАЛАЗАГРУЖАТЬ ЕГО В ПАМЯТЬ, ПОТОМ ВЫГРУЖАТЬ НА ДИСК, А ПОТОМ УЖЕ ЗАПУСКАТЬ НА ВЫПОЛНЕНИЕ.
МОЖНО ЛИ ЗАПУСТИТЬ ЕГО СРАЗУ, НЕ СОХРАНЯЯ НА ДИСКЕ, ЧТОБЫ ПОТОМ, СООТВЕТСТВЕННО. И СТИРАТЬ ЕГО С ВИНТА НЕ ПРИХОДИЛОСЬ.



А ты как его компилишь ? Может там есть возмоность подсунуть данные потоком и их компильнуть ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.06.2004 (Вс) 6:54

Мудрят, мудрят...
Если в памяти полный образ экзешника, то тебе придётся брать его PE-заголовок, там есть цифирь, указывающая на точку входа. Эту точку входа можно попробовать вызвать по указателю (см. VB+ASM). Но, честно говоря, не знаю, что получится, и можно ли вообще таким вот образом созавать процессы, и сильно подозреваю, что нельзя.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 13.06.2004 (Вс) 10:01

"А ты как его компилишь ? Может там есть возмоность подсунуть данные потоком и их компильнуть ?"

Компилю как обычно - меню File/ Make Project1.exe, то есть файл ресурсов, соответстенно, попадает внутрь скомплированной проги.
Потом при запуске этот ресурс загружаю в байтовый массив
например: A() = LoadResData(101, "Custom"). Потом из этого массива создаю на винте файл (экзешник), а уже потом его запускаю.
Все бы ничего, но просто само создание файла на диске занимает время. Я делаю это циклом.
Может есть более быстрый способ сбросить байтовый массив в файл?
У меня так:
fn = FreeFile
Open App.Path + "\My.exe" For Binary As fn
For i = 0 To UBound(A)
Put #fn, i + 1, A(i)
Next
Close fn
(Цикл выполняется секунды 4 (машина быстрая, создаваемый экзешник весит всего 246 Kило)).
Если есть варианты быстрее, то тогда не надо будет мучиться пусть создается лишь бы как-то побыстрее.


Если в памяти полный образ экзешника, то тебе придётся брать его PE-заголовок, там есть цифирь, указывающая на точку входа.

По сути, мой байтовый массив и есть полный образ экзэшника в памяти.
Похоже, ты прав. Здесь без ASM не обойтись, наверно, а API на таком уровне не знаю (если они вообще это могут) поэтому облом. :) .
Хотя...
А можно подробнее, как найти точку входа экзешника, а там все-таки может получится "ткнуть" проц в нее, хотя пока не представляю как; VB - это же не ASM, е-мое.
Чувствую, что ответ может быть типа: возьми Softice или ему подобную прогу :roll:
Ладно. Думаю, кратко объяснить про точку входа для VB это будет сложняво, только если пример кода готовый был бы.
Поэтому остается надежда ускорить само создание файла :cry: .
Блин! :x Ну где-то видел ведь пример на VB где человек именно так делал (запускал экзешник из памяти). :shock:

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 13.06.2004 (Вс) 10:04

Если в памяти полный образ экзешника, то тебе придётся брать его PE-заголовок, там есть цифирь, указывающая на точку входа.
Нет. с PE-заголовком разберусь.
Допустим, есть точка входа. Как дальше то быть?

EvilCoder
Посланец джихада
Посланец джихада
Аватара пользователя
 
Сообщения: 706
Зарегистрирован: 25.01.2004 (Вс) 15:08

Сообщение EvilCoder » 15.06.2004 (Вт) 21:08

< DELETE > :roll: :wink: 8)
Последний раз редактировалось EvilCoder 08.05.2006 (Пн) 23:25, всего редактировалось 1 раз.
<<------- EvilCoder ------->>

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 16.06.2004 (Ср) 10:46

ТОГДА ВОПРОС НА ЗАСЫПКУ. КАК В VB ВСТАВИТЬ КОД ASMa?
Помню раньше где-то видел, эта тема обсуждалась, но выводы были печальными, то есть типа это нереально :). Может в VB.NET это стало реальным?

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Где взять ASM+VB

Сообщение Faust » 16.06.2004 (Ср) 11:03

Посмотри в "Проектах" творение GSergа.
Листинги не горят!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 16.06.2004 (Ср) 11:09

В .NET это более чем реально хотя бы в силу одного простого, но фундаментального нововведения: там можно писать проект на смеси языков. Проще говоря: делаешь проект на VB, добавляешь в него сишный исходник, в нем создаешь функцию и в ней пишешь на inline assembler'е. Другое дело, я не удивлюсь, что в этом случае он не позволит тебе писать unmanaged code в таком смешанном проекте.
А вообще, имхо, проще сразу сделать 2 ехе-шника и не париться...

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 16.06.2004 (Ср) 11:20

Ок. Лады. Пожалуй тему можно закрыть.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 2

    TopList