Сам себе Iczelion

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl_, 11 май 2007.

Метки:
  1. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 23 Иконка в system tray
    в аттаче сорц и ехе
     
  2. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 27. Тултип-контрол
    в аттаче сорц и ехе
     
  3. DarkWanderer

    DarkWanderer New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2006
    Сообщения:
    333
    Адрес:
    Барнаул.
    В 23-ем иконка из трея не освобождается.
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    DarkWanderer
    в XP SP2 и XP Home Edition иконка из трея исчезает. Уточните, пожалуйста, какая у вас Win. Возможно, вместо
    Код (Text):
    1. exit_msg_loop: ret
    нужно поставить
    Код (Text):
    1. exit_msg_loop: push 0
    2. call _inp__ExitProcess@4
     
  5. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Урок 26. Сплэш-экран
    в аттаче сорц и ехе
     
  6. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Извините, что опять нарыл из глубин, но помоему, тема очень хорошая.
    Мне не понятен один момент, буду благодарен, если поясните.На этот момент меня навел upx,который я только начал юзать. С помощью этой замечательной программульки, захотелось мне уменьшить вес своего экзешника, который имел на тот момент 14.8кб чистого веса без всяких ресурсов. Upx выдал мне строку filealign < 0x200 is not yet supported. Ну очень мне было интересно, что может эта прога, в итоге в своем батнике я убираю строку параметра линковщика (polink -- masm32) /ALIGN:16 и пересобираю экзешник...
    Самое удивительное для меня было то, что размер моего файла после этого стал равен 4.5kb !!! без всяких upx-сов. (после upx'са - вообще 3kb). Мне как новичку, данный момент совершенно не понятен... Объясните, плиз.
    Пробовал на других своих сорцах - все работает стандартно: меньше выравнивание - меньше размер.
     
  7. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Посмотрел Олли. В таблице секций этих двух файлов при одинаковых VirtualSize (SECTION .DATA), в первом случае SizeOfRawData больше VirtualSize на разницу выравнивания, а во втором VirtualSize меньше чем VirtualSize в пять разов...
    Что твориться...
     
  8. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    К вопросу о
    Нарыл цитатку.
     
  9. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Aspire
    Речь идет о неинициализированных данных. С тем же успехом можно и самому отвести место под Buf[100000] в стеке, на пример, local Buf[100000]:byte, то же в теле исполняемого файла не занимают ни байта, а можно место и через heap отвести...
    EXE'шники, которые приводятся в "Сам себе Iczelion"
    Код (Text):
    1. \masm32\bin\ml /c /Cp /Gz /Ic:\masm32\include /coff /nologo %1.asm
    2. if errorlevel 1 goto TheEnd
    3. \masm32\bin\PoLink1 /SUBSYSTEM:WINDOWS /ALIGN:4 /MERGE:.data=.text /LIBPATH:c:\masm32\lib /NOLOGO /STUB:\masm32\bin\stubby.exe %1.obj
    собираются с 4-байтным стабом stubby.exe='M','Z',0,0 и переделанным polink1 (смотрите в аттаче)
     
  10. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Ух ты! А можно поподробнее, как получается 4-байтный стаб?
    Архив распаковывается с ошибками.
     
  11. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Aspire
    содержимое стаб-файла='M','Z',0,0 подробности здесь
     
  12. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Пусть наше приложение обрабатывает следующие сообщения: WM_DESTROY=2 WM_SETFOCUS=7 WM_KILLFOCUS=8 WM_SETREDRAW=11 WM_GETTEXT=13 WM_CLOSE=16. Для увеличения скорости просмотра очереди сообщений строим таблицу MsgTable, где номер элемента таблицы соответствует номеру сообщения. Сами табличные элементы представляют собой адреса (процедур), где эти сообщения обрабатываются. Пусть в таблице будут пока номера сообщений, необрабатываемым сообщениям соответствует 0. Пусть количество столбцов будет кратным 2N
    0123
    02000
    10780
    2011013
    300160
    V1=(1,2,2,1); количество обрабатываемых сообщений в каждой строке
    V2=(0,1,3,5); индекс с которого начинается обрабатываемое сообщение на строке
    H=(0,1,2,1,3,2); номера столбцов обрабатываемых сообщений
    Z=(@@WM_DESTROY, @@WM_SETFOCUS, @@WM_KILLFOCUS, @@WM_SETREDRAW, @@WM_GETTEXT, @@WM_CLOSE); адреса обработки сообщений
    Код (Text):
    1.     mov eax,Msg
    2.     cmp eax,WM_CLOSE; номер максимального обрабатываемого сообщения
    3.     ja default1
    4.     sub eax,WM_DESTROY;номер минимального обрабатываемого сообщения
    5.     mov edx,eax
    6.     shr eax,2; получили номер строки
    7.     and edx,3;получили номер столбца
    8.     mov ecx,V1[eax]; количество обрабатываемых сообщений на строке
    9.     jecxz default1
    10. ;если ни одного обрабатываемого сообщения идем на обработку по умолчанию
    11.     mov ebx,V2[eax]; получили индекс в таблице адресов обработки сообщений
    12. a1: cmp dl,H[ebx]
    13.     je a2; нашли сообщение
    14.     inc ebx
    15.     loop a1
    16. default1: leave
    17.     jmp DefWindowProcA
    18. a2: jmp dword ptr Z[ebx*4]; переход на адрес обработки сообщения
     
  13. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Наверное, нужно сдержать обещание, которое давалось в #17 и написать по-настоящему маленькое приложение "размер к которому можно/нужно стремиться 97 байт, но это PE-заголовок файла перемешанный с кодом, это уже ручная выделка"
    Правда, колдовать с HexEditorom или с Hiew'ером мы не будем, а постараемся максимально облегчить свой труд. В аттаче находятся сорцы и ехе программ, которые Выводят MessageBox размером 97 байт и Оконное приложение в 218 байт. С этого места можно делать новый виток и опять переписывать уроки Iczelion'a
     
  14. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Мда посмотрел я это дело под отладчиком EXE рожает EXE
    прям как вирус :)
    А ты урок-пайп не собирашеься переписать а то я хочу взглянуть (нигде не могу найти исходник) двухстороннего пайпа .
     
  15. Irridium

    Irridium New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2007
    Сообщения:
    9
    Адрес:
    Украина, Николаев
    А можно все уроки выложить одним архивом или в виде chm?
     
  16. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Irridium
    Куда выложить?
     
  17. Irridium

    Irridium New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2007
    Сообщения:
    9
    Адрес:
    Украина, Николаев
    Ну хотя бы на http://www.filefactory.ru/
     
  18. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Ввод символов с клавиатуры, урок 6, размер 265 байт
    Сорц и ехе в аттаче
     
  19. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Мышь, урок 7. В отличие от оригинала обрабатывается WM_LBUTTONDOWN и WM_RBUTTONDOWN, запоминаются до MAXRECTS координат кликов. Размер 553 байта. Сорц и ехе в аттаче
     
  20. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    не совсем Iczelion - аналоговые часы по мотивам Analog Clock by Mann. Если подойти творчески, можно выкинуть "лишнее" и при сохранении функциональности сократить экзешник в три раза (4608 -> 1408)