Текущий архив: 2004.11.28;
Скачать: CL | DM;
ВнизVB to Delphi Найти похожие ветки
← →
Neiron (2004-11-16 20:19) [0]Уважаемые мастера,у меня к вам вопрос, как можно перевести следующий код с 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 20:53) [1]100 баксов.
← →
novice_man © (2004-11-16 20:56) [2]Гражданин в третьем ряду слева от блондинки 100 баксов раз!
← →
KilkennyCat © (2004-11-16 20:58) [3]а в какую сторону будет меняться?
← →
begin...end © (2004-11-16 20:59) [4]Апчх**! (Аллергия на Бейсик)
← →
novice_man © (2004-11-16 21:01) [5]Гражданин в третьем ряду слева от блондинки 100 баксов два!
← →
KilkennyCat © (2004-11-16 21:02) [6]110 баксов, я не заметил:
> "заполняем все поля ерундой
← →
novice_man © (2004-11-16 21:07) [7]А если найдут - "если нашли - грузим" :)
← →
KilkennyCat © (2004-11-16 21:08) [8]
> в первых 5000 байт
тоже прикольно.
Страницы: 1 вся ветка
Текущий архив: 2004.11.28;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c