Автор Тема: Узнать размер исполняющего файла без оверлея  (Прочитано 1489 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Afonichev [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1535
  • Репутация: 408
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Не давно мне понадобилось записывать данные в конец исполняющего файла (далее stub), но как быть если их нужно будет прочитать из самого себя, для этого написал функцию которая узнаёт размер исполняющего файла без оверлея

(нажмите для показа/скрытия)

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

2. Если нужно извлечь оверлей из самого себя, вызвать функцию без параметра.

3. Узнать адрес с которого начинается оверлей.

Код: AutoIt [Выделить]
$iOverlay = __pe_GetSizeOfImage(...)
 


4. Узнать размер оверлея

Код: AutoIt [Выделить]
;~ Для стороннего файла
$sFile = @ScriptDir & '\Test.exe'

$iFileSize = FileGetSize($sFile)
$iOverlay = __pe_GetSizeOfImage($sFile)

$iOverlaySize = ($iFileSize - $iOverlay)

;~ Для самого себя
If @Compiled Then
    MsgBox(0, 'Размер данных в оверлее', FileGetSize(@ScriptFullPath) - __pe_GetSizeOfImage())
EndIf
 


5. Не большой тест, скомпилируйте пример

(нажмите для показа/скрытия)

Запустите полученный исполняющий файл, убедитесь что размер оверлея равен нулю, откройте файл в HEX редакторе, добавьте несколько байт в самый конец файла, сохраните, запустите полученный файл и вы увидите сколько байт вы добавили в конец исполняющего файла. Данный пример особенно пригодится тем кто любит строить свои билдеры которые в ходе выполнения извлекают из себя стаб и добавляют в него некую информацию.

P.S. Если вы используете AutoIt v3.3.10.2 то в оверлее после компиляции ни чего не будет, так как скрипт добавляется в ресурсы исполняющего файла, если же версию AutoIt v3.3.8.1 и ниже, то изначально в оверлее будет некоторое количество байт, так как там уже хранится скрипт.

Вот простой пример

Test.exe - файл в который будут записываться данные
Write.exe - файл который будет записывать данные

Запустите Test.exe и убедитесь что в него ни чего не записано, в 'Размер данных в оверлее' должно стоять 0 (ноль), запустите Write.exe, введите в поле текст и нажмите OK, далее снова запустите Test.exe, теперь вы увидите размер данных в оверлее и сами данные.
« Последнее редактирование: Март 16, 2014, 18:39:58 от Viktor1703, Причина: Объединение сообщений »

Русское сообщество AutoIt

Узнать размер исполняющего файла без оверлея
« Отправлен: Февраль 27, 2014, 13:47:19 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
4231 Просмотров
Последний ответ Май 17, 2011, 10:43:13
от CreatoR
0 Ответов
1902 Просмотров
Последний ответ Май 17, 2011, 10:06:13
от Kaster
4 Ответов
3430 Просмотров
Последний ответ Сентябрь 04, 2011, 18:41:14
от zeionline
9 Ответов
5787 Просмотров
Последний ответ Сентябрь 23, 2011, 15:38:29
от agikon
2 Ответов
2531 Просмотров
Последний ответ Ноябрь 29, 2011, 18:35:18
от neobi
6 Ответов
4784 Просмотров
Последний ответ Март 13, 2012, 23:21:38
от CreatoR
22 Ответов
9638 Просмотров
Последний ответ Апрель 20, 2012, 13:02:11
от agikon
2 Ответов
2642 Просмотров
Последний ответ Февраль 26, 2014, 18:14:37
от GUIMish
11 Ответов
2178 Просмотров
Последний ответ Февраль 08, 2015, 04:01:41
от Vovsla
3 Ответов
1199 Просмотров
Последний ответ Сентябрь 03, 2016, 11:53:00
от Skif_off