непретенциозная тема

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

Сообщение Dmitriy2003 » 12.04.2007 (Чт) 21:14

Не хочу флудить товарищи, но скоро выдет новая версия бэйсика = tyrymbasic - называется! :D

CoTaskMemFree
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 12.04.2007 (Чт) 19:23
Откуда: Из под бана

Сообщение CoTaskMemFree » 12.04.2007 (Чт) 21:46

как экзешником создать экзешник


Далаем темлпейт-приложение.

Это приложение должно делать следующее:
1) Запускаться с Sub Main
2) Загружать из своих ресурсов некие данные.
3) Выдеять нужное кол-во страниц памяти (и не забываем поставить им флаг соотв. "права") под эти данные и помещать их туда. Возможно потребуется сделать некоторые изменения в данных.
4) Передавать управление в ту область памяти, где лежат данные.

Делаем темплейт-приложение, компилируем его. Получаем EXE файл.

Теперь нужно сделать мейкер-приложение.

Ложим в ресурсы мекер-приложения темплейт-приложение.

Наше мейкер-приложение должно делать следующее.
1) Извлекать из своих ресурсов темлейт-приложение и копировать его содержимоей в новый EXE-файл.

2) Компилировать произвольный код в байт-код, и этот байт код засовывать в ресурсы только-что-созданного-файла-темплейт-приложения, в то место, в котором там лежат "данные".

Подобная схема является общей, для построения кривого миникомпилятора.

Зы. В пункте 3, в первой части вместо страниц памяти, можно использовать байтовый массив. Но есть шанс нарваться на DEP.
It is Хакер.

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 13.04.2007 (Пт) 11:58

ну можно и полегче
Прога проверяет есть ли в ее exe в самом конце какие нибудь данные (ну там прога может ставить свою сигнатуру или чо то в этом роде)
если нет:
запускает форму где предлогается создать есчо один exe
с даненными.
ну этот exe будет копией ее exe с данными в конце (newexe = oldexe + resfile + signature)
если есть
использует данные стоящее после первоначального EOF

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

Сообщение GSerg » 13.04.2007 (Пт) 13:40

tyrym писал(а):to Dmitriy2003 засунься, придурок.

Ещё раз и вылетишь на свой удав пинком под зад.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Crio
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 21.05.2007 (Пн) 12:01
Откуда: Питер

Сообщение Crio » 28.05.2007 (Пн) 12:37

У меня получилось так:

На форме два TextBox, один под другим и одна кнопка:

Код: Выделить всё
Private Sub Form_Load()

Dim strInput As String

strInput = ReadWrite

If strInput <> "" Then
    Form1.Show
    Text1.Top = 120
    Text1.Height = 2415
    Form1.Caption = "Чтец"
    Text1 = strInput
Else
    Form1.Show
End If

End Sub

Private Sub Command1_Click()

Dim intFileNum As Integer
Dim strAdd As String

If Text2 = "" Then Exit Sub

ReadWrite True, Text1, Text2

End Sub

Function ReadWrite(Optional blnWrite As Boolean, Optional strInput As String, Optional strFileName As String) As String

Dim intFileNum As Integer
Dim k As Long
Dim bytCarry As Byte
Dim lngStart As Long

intFileNum = FreeFile

If Not blnWrite Then
   
    Open App.Path & "\" & App.EXEName & ".exe" For Random As intFileNum Len = 1

    For k = LOF(intFileNum) - 11 To LOF(intFileNum) - 2
        Get #intFileNum, k, bytCarry
        ReadWrite = ReadWrite & Chr(bytCarry)
    Next

    If ReadWrite Like "##########" Then
        lngStart = Int(ReadWrite)
    Else
        ReadWrite = ""
        Close intFileNum
        Exit Function
    End If

    ReadWrite = ""

    For k = lngStart + 3 To LOF(intFileNum) - 4 - 10
        Get #intFileNum, k, bytCarry
        ReadWrite = ReadWrite & Chr(bytCarry)
    Next

Else

    FileCopy App.Path & "\" & App.EXEName & ".exe", App.Path & "\" & strFileName & ".exe"

    Open App.Path & "\" & strFileName & ".exe" For Append As intFileNum

    Print #intFileNum, vbCrLf & strInput & vbCrLf & String(10 - Len(Trim(Str(LOF(intFileNum)))), "0") & Trim(Str(LOF(intFileNum)))
   
End If

Close intFileNum
   
End Function


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

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

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

    TopList