Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

VB to Delphi [D1, D2, D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]


Neiron ©   (2004-11-16 20:19:00) 

Уважаемые мастера,у меня к вам вопрос, как можно перевести следующий код с VB в Pascal:

Public Type pe_section_header
   section_name As String * 8 ' Имя секции [8 байт]
   section_size As Long       ' Размер секции в памяти
   section_rva As Long        ' Адрес загрузки секции в памяти
   section_size2 As Long      ' Размер секции в файле
   section_start As Long      ' Смещение начала секции в файле
   reserved As String * 12
   section_flags As Long      ' Флаги секции
End Type

Public Type UPX_STRUCT
   upxMagic As String * 4     ' Символы "UPX!"
   upxVersion As Byte         ' Версия UPX'а (например: 0C значит 1.24, 0D - 1.90)
   upxFormat As Byte          ' Определяет формат файла (PE, ELF, DOS и т.д.) PE - 09
   upxMethod As Byte          ' Метод сжатия (если NRV или UCL, то 02)
   upxLevel As Byte           ' Степень сжатия (от 0 до 10)
   upxU_adler As Long         ' CRC части экзешника в распакованном виде
   upxC_adler As Long         ' CRC части экзешника в запакованном виде
   upxU_len As Long           ' Размер части экзешника в распакованном виде
   upxC_len As Long           ' Размер части экзешника в запакованном виде
   upxU_file_size As Long     ' Размер распакованного экзешника.
   upxFilter As Integer       ' Метод распаковки
   upxCRC As Byte             ' CRC сигнатуры
End Type

'глобальный массив секций
Public sSections() As pe_section_header

Private Sub Main()
'считываем данные из командной строки
sFileName = Command$
'если программа была запущена без параметров - выводим сообщение
'об ошибке и выходим
If sFileName = "" Then MsgBox "Вы не передали имя файла в командной строке", _
vbCritical, "Ошибка": Exit Sub
'удаляем лишние кавычки
If Left$(sFileName, 1) = Chr(34) Then sFileName = Mid$(sFileName, 2, _
Len(sFileName) - 2)
'объявляем переменные
Dim sPeOffset As Long, sFindUPX As String * 5000, sUPX As UPX_STRUCT, _
sNumberSections As Integer
'создадим резервную копию
FileCopy sFileName, Left$(sFileName, Len(sFileName) - 3) & "bak"
'откроем файл
sFile = FreeFile
Open sFileName For Binary As #sFile
'считаем адрес PE заголовка
Get #sFile, &H3C + 1, sPeOffset
'определим число секций
Get #sFile, sPeOffset + 7, sNumberSections
'найдем адрес начала описания секций
sSectionsStart = sPeOffset + &HF9
'ищем сигнатуру UPX в первых 5000 байт программы
Get #sFile, 1, sFindUPX
sFind = InStr(1, sFindUPX, "UPX!")
'если нашли - грузим
If sFind > 0 Then
 Get #sFile, sFind, sUPX
 'заполняем все поля ерундой
 sUPX.upxMagic = "GPcH": sUPX.upxVersion = 0
 sUPX.upxC_adler = 0: sUPX.upxC_len = 0
 sUPX.upxCRC = &HFF: sUPX.upxFilter = 0
 sUPX.upxFormat = 0: sUPX.upxMethod = 0
 sUPX.upxU_adler = 0: sUPX.upxU_file_size = 0
 sUPX.upxU_len = 0: sUPX.upxVersion = 11
 'сохраняем изменения
 Put #sFile, sFind, sUPX
'если не нашли - выводим сообщение об ошибке и выходим
Else
 MsgBox "Ошибка: файл '" & sFileName & "' не содержит сигнатуру UPX", _
 vbCritical, "Скрамблер UPX": Close #sFile: Exit Sub
End If
'создаем массив секций
ReDim sSections(sNumberSections - 1)
Get #sFile, sSectionsStart, sSections
'установим новое имя секций
For i = 0 To sNumberSections - 1
 sSections(i).section_name = ".sux"
Next
'сохраним измененные данные
Put #sFile, sSectionsStart, sSections
'закроем файл
Close #sFile
'сообщим, что операция прошла успешно
MsgBox "Файл '" & sFileName & "' успешно обработан", vbInformation, "Скрамблер UPX"
End Sub


Или если кто знает,где можно достать материал для Delphi.


KilkennyCat   (2004-11-16 21:08:00) [1]


> в первых 5000 байт


тоже прикольно.


novice_man   (2004-11-16 21:07:00) [2]

А если найдут - "если нашли - грузим" :)


KilkennyCat   (2004-11-16 21:02:00) [3]

110 баксов, я не заметил:


> 'заполняем все поля ерундой


novice_man   (2004-11-16 21:01:00) [4]

Гражданин в третьем ряду слева от блондинки 100 баксов два!


begin...end   (2004-11-16 20:59:00) [5]

Апчх**! (Аллергия на Бейсик)


KilkennyCat   (2004-11-16 20:58:00) [6]

а в какую сторону будет меняться?


novice_man   (2004-11-16 20:56:00) [7]

Гражданин в третьем ряду слева от блондинки 100 баксов раз!


KilkennyCat   (2004-11-16 20:53:00) [8]

100 баксов.


Наверх

Титульная страница Поиск, карта сайта Написать письмо