![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 баксов.