Вот есть в Windows Resource Kits утилита sleep.exe, которая приостанавливает выполнение в bat-файле на n мс, где n передается в качестве параметра. Весит эта утилита 5 Кб. Вот ведь видел же где-то другую sleep.exe (или sleep.com) - делает тоже самое, но размером всего в несколько байт. Там даже бинарный код в виде обычной строки был - сохраняешь эту строку в файл, даешь ему расширение exe и все - работает. Никто не встречал? Или может кто может написать такое (преобразовать параметр в число и вызвать Sleep(DWORD n) из WinAPI?
sandrey sleep.com для ДОС, ага. В самом деле можно в несколько байт сделать - чего там, регистры заполнить, и вызвать прерывание. И использовать ТОЛЬКО в чистом ДОС, и только в бат-файлах. А вот в винде, с бат-файлами... есть 3 способа: 1) запомни в переменную текущее время. Крути цикл, пока текущее время не будет отличаться от сохраненного на нужный интервал. Получить текущее время - переменная %TIME% 2) использовать WSH/VBScript/JScript - там есть задержка на нужный интервал. Скрипт можно вызывать из бат-файла, или весь батник переписать на скрипт 3) использовать sleep.exe весом в 5кб и не выпендриваться Хочешь чего-то другого? Напиши свой Sleep.exe - с блекджеком и шлюхами! Размер будет от 1К (скорее в районе 2.5К), или для такой простой задачи тебе придется пару недель изучать во всех тонкостях PE-формат - оно тебе надо?
Mikl___ ну я же сказал - для такой простой задачи придется изучать PE-формат )) чтоб было меньше, а тем более 97 байт Просто вопрос можно толковать по разному: а) как можно сделать задержку выполнения бат-файла? б) как написать очень маленький sleep.exe, чтоб использовать его в бат-файле. Вариант а) имеет смысл - и допускает ответ (ну мало ли, срочно надо, чтоб везде работало, без дополнительных установок чего-либо). Вариант б) смысла не имеет, и может быть собственным исследованием, никого ни к чему не обязывающим. Зачем нам ломать человеку удовольствие от исследования (и тратить свое время на не имеющую практической ценности задачу)?
Igor1024 Не-не, там можно с заголовком пошаманить: убрать stub, MZ-заголовок до 8-11 байт ужать, вдвинуть секции одна в другую, вдвинуть заголовок в секцию, хранить данные в заголовке вместо секции data, обрезать лишнее в конце - короче, 97 байт реально для 1 вызова АПИ. Даже вроде 81 видел как абсолютный рекорд. Другое дело, что тут надо будет взять командную строку, преобразовать параметр в число, вызвать Sleep - по любому больше 97 байт будет ) А главное, для такого надо изучить MZ-PE до деталей - похвально, и где-то и пригодится... но для данной задачи практически как микросхемы в домашних условиях делать: пара недель чтения спецификации, попыток впихнуть одно в другое, попыток использовать ординалы вместо имен, обнаружение, что это не работает на всех системах... а потом заканчиваешь и думаешь: а зачем я это делал, если результат трюков работает все равно только в ХР, и не работает в Висте и семере? А в старых добрых 9х вообще "не является исполняемым файлом" так что флаг в руки - но уж никак не "может кто может написать такое", такое только самостоятельно
Я имел в виду размер на диске. sandrey, судя по всему, именно про него и говорил. А так, если возьмём идеальную файловую систему, можно и 97
Igor1024 Даже вывод окна можно уложить в 185 байт, а уж sleep и подавно, просто 97 байт -- это минимальный размер заголовка меньше можно, но система такой файл уже не запустит. А остальное, как сказал FatMoon "а зачем я это делал?" FatMoon а про 81 байт поищите ссылочку? Просто уж очень интересно...
а не тут ли где-то и видел? там последовательное улучшение было 108 - 97 (на всех ХР) - 81 (для ХР сп2 только). Где-то года полтора назад...
FatMoon При сжатии MZ-заголовка до 4 байт -- минимальный PE-заголовок заканчивается на поле SubSystem (+5Ch от "PE") без него или с нулевым значением в этом поле, что соответствует IMAGE_SUBSYSTEM_UNKNOWN - неизвестная подсистема, файл не загружается. Это и определяет минимальную длину 4+5Ch+1=61h А ссылка не на это? Но там 97 байт и давность уже 3 года...
gaeprust Можно ссылку на PE-EXE меньше 97 байт и ссылку на пример реализации, о которой вы написали... pleez!
Mikl___ Я говорил что может быть меньше ? Может и может, но хз. На какомто сайте было описание создания маленького экзе, было давно и я не помню какие размеры. Вот там некоторые поля хидера, при которых ядро всё есчо может запускать экзе были определены чисто брутом, а не RCE. Потом я смотрел эти проверки, там их множество, тоже и для вашего 97-байтного модуля. Но это давно было что там и как я уже не помню. Кстате именно отсюда была взята идея модификации смещений для загрузки по произвольным адресам. Вдобавок на ранних версиях оси там была уязвимость, позволяющая писать в ап ядра только сформировав особое значение смещений в пе.