Что нового

[Данные, строки] Сохранение exe в бинарном виде

zerobot

Новичок
Сообщения
78
Репутация
0
Доброе время суток!

Не знал к какой категории отнести вопрос, извиняюсь, если ошибся.
И так, имеется код:
Код:
Global $sModule = FileOpenDialog("", "", "All (*.*)") ; change to yours wanted

Global $hModule = FileOpen($sModule, 16)
If @error Then Exit

Global $bBinary = FileRead($hModule)
FileClose($hModule)

Global Const $MAX_LINESIZE = 4095
Global $iNewLine, $j
Global $iChinkSize = 32
Global $sBinary


For $i = 1 To BinaryLen($bBinary) Step $iChinkSize

    $j += 1

    If 4*($j * $iChinkSize) > $MAX_LINESIZE - 129 Then
        $iNewLine = 1
    EndIf

    If $iNewLine Then
        $iNewLine = 0
        $j = 0
        $sBinary = StringTrimRight($sBinary, 5)
        $sBinary &= @CRLF & '$bBinary &= "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF
        ContinueLoop
    EndIf

    If $i = 1 Then
        $sBinary &= '$bBinary = "' & BinaryMid($bBinary, $i, $iChinkSize) & '" & _' & @CRLF
    Else
        $sBinary &= '       "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF
    EndIf

Next

$sBinary = StringTrimRight($sBinary, 5)

ClipPut($sBinary)
FileWrite("YourBinary.txt",$sBinary)


Что делает:
Этот код открывает некий, выбранный нами, exe-шник, читает его, переводит в Binary и сохраняет в txt файл под названием YourBinary.

В чем проблема/вопрос:
Работает этот скрипт ужастно долго, программу весом 2-3 мб конвертирует у меня уже минут 10... Как это можно исправить и быстро получить желаемое?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Я делаю так:

Код:
$sFile = FileOpenDialog('Open file to build binary function', '', 'All Files (*.*)')
If @error Then Exit

$sFileName = StringRegExpReplace($sFile, '^.*\\', '')
$sName = StringReplace(StringRegExpReplace($sFileName, '\.[^\.]+$', ''), '.', '_')

$hFile = FileOpen($sFile, 16)
$bRead = FileRead($hFile)
FileClose($hFile)

$sVar = 'Func __Init_' & $sName & '($sFile = ''' & $sFileName & ''')' & @CRLF & @TAB & 'Local $bData = ''''' & @CRLF & @TAB & @CRLF
$iOffset = 1
$iMaxStrSize = (4080 / 2)

While 1
	$bMid = BinaryMid($bRead, $iOffset, $iMaxStrSize)
	
	If $bMid = '' Then
		$sVar &= @TAB & '$hFile = FileOpen($sFile, 2+16)' & @CRLF
		$sVar &= @TAB & 'FileWrite($hFile, Binary(''0x'' & $bData))' & @CRLF
		$sVar &= @TAB & 'FileClose($hFile)' & @CRLF
		$sVar &= 'EndFunc' & @CRLF
		
		ExitLoop
	EndIf
	
	$sVar &= @TAB & '$bData &= ''' & StringTrimLeft($bMid, 2) & '''' & @CRLF & @TAB & @CRLF
	$iOffset += $iMaxStrSize
WEnd

ClipPut($sVar)
MsgBox(64, 'Title', 'Binary data for ' & $sFileName & ' sent to the clipboard.')
 
Верх