Часы

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 9 фев 2022.

  1. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    600
    Код (C):
    1. SetWindowPos(hWnd, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    Функцию запихнул конец в блока WM_CREATE. Стало поверх окон, только диспетчер задач всё равно сверху, если флажок соответствующий включен.
    Теперь время можно контролировать в ютубе.
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Мои часы (FASM, GDI+), выход по двойному клику:
    Код (ASM):
    1. format PE64 GUI
    2.  
    3. WINDOW_HEIGHT equ 32            ; Высота окна DLU
    4. TIMER_ID equ 123124             ; ID таймера
    5. COLOR_ACTIVE equ 0xC000AF70     ; Цвет активных сегментов ARGB
    6. COLOR_INACTIVE equ 0x20007F30   ; Цвет неактивных сегментов ARGB
    7.  
    8. ; Вызов GDI+ функций с проверкой
    9. macro gdip_invoke proc, [arg] {
    10. common
    11.     invoke proc, arg
    12.     .if eax
    13.         jmp .error_handler
    14.     .endif
    15. }
    16.  
    17. ; Вызов API функции с проверкой BOOL значения
    18. macro bool_invoke proc, [arg] {
    19. common
    20.     invoke proc, arg
    21.     .if ~eax
    22.         jmp .error_handler
    23.     .endif
    24. }
    25.  
    26. entry main      ; Точка входа
    27.  
    28. include 'win64wx.inc'
    29.  
    30. section '.idata' import data readable writeable
    31.  
    32. library kernel32, 'kernel32.dll', \
    33.         gdi32, 'gdi32.dll', \
    34.         user32, 'user32.dll', \
    35.         gdiplus, 'gdiplus.dll'
    36.  
    37. import kernel32, \
    38.        GetLocalTime, 'GetLocalTime', \
    39.        ExitProcess, 'ExitProcess'
    40.  
    41. import gdi32, \
    42.        CreateCompatibleBitmap, 'CreateCompatibleBitmap', \
    43.        CreateCompatibleDC, 'CreateCompatibleDC', \
    44.        DeleteDC, 'DeleteDC', \
    45.        DeleteObject, 'DeleteObject', \
    46.        SelectObject, 'SelectObject'
    47.  
    48. import user32, \
    49.        DialogBoxIndirectParam, 'DialogBoxIndirectParamW', \
    50.        EndDialog, 'EndDialog', \
    51.        GetClientRect, 'GetClientRect', \
    52.        SetTimer, 'SetTimer', \
    53.        UpdateLayeredWindow, 'UpdateLayeredWindow', \
    54.        GetDC, 'GetDC', \
    55.        ReleaseDC, 'ReleaseDC', \
    56.        ReleaseCapture, 'ReleaseCapture', \
    57.        SendMessage, 'SendMessageW', \
    58.        SetWindowPos, 'SetWindowPos'
    59.  
    60. import gdiplus, \
    61.        GdiplusStartup, 'GdiplusStartup', \
    62.        GdiplusShutdown, 'GdiplusShutdown', \
    63.        GdipSetSmoothingMode, 'GdipSetSmoothingMode', \
    64.        GdipDeleteGraphics, 'GdipDeleteGraphics', \
    65.        GdipCreateFromHDC, 'GdipCreateFromHDC', \
    66.        GdipGraphicsClear, 'GdipGraphicsClear', \
    67.        GdipCreateSolidFill, 'GdipCreateSolidFill', \
    68.        GdipDeleteBrush, 'GdipDeleteBrush', \
    69.        GdipFillEllipse, 'GdipFillEllipse', \
    70.        GdipResetWorldTransform, 'GdipResetWorldTransform', \
    71.        GdipTranslateWorldTransform, 'GdipTranslateWorldTransform', \
    72.        GdipScaleWorldTransform, 'GdipScaleWorldTransform', \
    73.        GdipRotateWorldTransform, 'GdipRotateWorldTransform', \
    74.        GdipFillPolygon, 'GdipFillPolygon', \
    75.        GdipSetSolidFillColor, 'GdipSetSolidFillColor'
    76.  
    77. section '.data' data readable writable
    78.  
    79. hGdipToken dq 0 ; GDI+ токен
    80. hBitmap dq 0    ; Буферный GDI растр
    81. hGraphics dq 0  ; GDI+ контекст для рисования
    82. hBrush dq 0     ; GDI+ кисть
    83. hDC dq 0        ; Буферный GDI контест
    84. hOldBmp dq 0    ; Оригинальный растр буферного контекста
    85. bBlink db 0     ; Переменная мерцания сегментов разделителей
    86. fSegSize dd ?   ; Высота сегмента float
    87. rcWindow RECT ? ; Прямоугольник окна
    88.  
    89. section '.text' code readable executable
    90.  
    91. ; Шаблон диалогового окна
    92. g_dlg_template:
    93. dd DS_CENTER or WS_POPUP
    94. dd WS_EX_LAYERED
    95. dw 0, 0, 0, WINDOW_HEIGHT * 385 / 100, WINDOW_HEIGHT, 0, 0
    96. du 'Clock', 0
    97.  
    98. ; GpInput структура
    99. g_gdip_input:
    100. dd 1
    101. dq 0
    102. dd 0
    103. dd 0
    104.  
    105. ; Сегменты цифр 0-9 (номер бита уазывает сегмент):
    106. ;
    107. ;   5
    108. ;   -
    109. ; 3|4|1
    110. ;   -
    111. ; 2|6|0
    112. ;   _
    113.  
    114. g_segments:
    115. db 0x6F, 0x03, 0x76, 0x73, 0x1b, 0x79, 0x7d, 0x23, 0x7F, 0x7B
    116.  
    117. ; Точки сегмента
    118. ;  ----------
    119. ; /          \
    120. ; \          /
    121. ;  ----------
    122. g_segment_points:
    123. dd 0.1, 0.1, 0.2, 0.0, 0.8, 0.0, 0.9, 0.1, 0.8, 0.2, 0.2, 0.2, 0.1, 0.1
    124.  
    125. ; Позиция разрядов
    126. g_segments_pos:
    127. dd 0.0, 1.3, 3.0, 4.3, 6.0, 7.3
    128.  
    129. ; Нарисовать сегмент
    130. proc draw_seg, x:DWORD, y:DWORD, h:DWORD
    131.  
    132.     mov [x], ecx
    133.     mov [y], edx
    134.     mov [h], r8d
    135.  
    136.     ; Размеры полигона относительно высоты сегмента
    137.     gdip_invoke GdipResetWorldTransform, [hGraphics]
    138.     gdip_invoke GdipScaleWorldTransform, [hGraphics], float [fSegSize], float [fSegSize], 0
    139.  
    140.     .if ~[h]
    141.  
    142.         ; Для вертикальных сегментов - поворот и сдвиг на пол сегмента
    143.         mov eax, 0.2
    144.         movd xmm1, eax
    145.         addss xmm1, [x]
    146.         mov eax, 0.1
    147.         movd xmm2, eax
    148.         addss xmm2, [y]
    149.  
    150.         gdip_invoke GdipTranslateWorldTransform, [hGraphics], rdx, r8, 0
    151.         gdip_invoke GdipRotateWorldTransform, [hGraphics], float dword 90.0, 0
    152.  
    153.     .else
    154.  
    155.         mov eax, 0.1
    156.         movd xmm1, eax
    157.         addss xmm1, [x]
    158.  
    159.         gdip_invoke GdipTranslateWorldTransform, [hGraphics], rdx, float [y], 0
    160.  
    161.     .endif
    162.  
    163.     gdip_invoke GdipFillPolygon, [hGraphics], [hBrush], g_segment_points, 7, 0
    164.  
    165. .error_handler:
    166.  
    167.     ret
    168.  
    169. endp
    170.  
    171. ; Нарисовать цифру
    172. proc draw_dig uses rsi rbx, val:DWORD, pos:DWORD
    173.     locals
    174.         fXMM6 rb 16
    175.         fXMM7 rb 16
    176.     endl
    177.  
    178.     movdqu xword [fXMM6], xmm6
    179.     movdqu xword [fXMM7], xmm7
    180.  
    181.     ; Загрузить позицию левого и правого сегментов
    182.     movss xmm6, [g_segments_pos + edx * 4]
    183.     mov eax, 1.0
    184.     movd xmm7, eax
    185.     addss xmm7, xmm6
    186.  
    187.     ; Загрузить биты сегмента
    188.     xor esi, esi
    189.     movzx ebx, byte [g_segments + ecx]
    190.  
    191.     .repeat
    192.  
    193.         ; Получить бит сегмента в CF
    194.         shr ebx, 1
    195.  
    196.         .if CARRY?
    197.             gdip_invoke GdipSetSolidFillColor, [hBrush], COLOR_ACTIVE
    198.         .else
    199.             gdip_invoke GdipSetSolidFillColor, [hBrush], COLOR_INACTIVE
    200.         .endif
    201.  
    202.         mov r8d, esi
    203.         and r8d, 4
    204.  
    205.         .if esi < 2
    206.             movd ecx, xmm7
    207.         .else
    208.             movd ecx, xmm6
    209.         .endif
    210.  
    211.         .if esi = 6
    212.             mov edx, 2.0
    213.         .else
    214.             test esi, 1
    215.             .if ZERO?
    216.                 mov edx, 1.0
    217.             .else
    218.                 mov edx, 0.0
    219.             .endif
    220.         .endif
    221.  
    222.         stdcall draw_seg
    223.  
    224.         inc esi
    225.  
    226.     .until esi = 7
    227.  
    228. .error_handler:
    229. .exit_proc:
    230.  
    231.     movdqu xmm6, xword [fXMM6]
    232.     movdqu xmm7, xword [fXMM7]
    233.  
    234.     ret
    235.  
    236. endp
    237.  
    238. ; Обработчик диалогового окна
    239. proc dlg_proc uses rdi rbx, hWnd, uMsg, wParam, lParam
    240.     locals
    241.         tTime SYSTEMTIME
    242.         tPT POINT
    243.         dwBF dd ?
    244.         hDCTemp dq ?
    245.     endl
    246.  
    247.     mov [hWnd], rcx
    248.  
    249.     .if rdx = WM_TIMER & r8 = TIMER_ID
    250.  
    251.         invoke GetLocalTime, addr tTime
    252.         gdip_invoke GdipGraphicsClear, [hGraphics], 0x01000000
    253.  
    254.         lea rdi, [tTime.wHour]
    255.         xor ebx, ebx
    256.  
    257.         .repeat
    258.  
    259.             mov ax, [rdi]
    260.             mov cl, 10
    261.             div cl
    262.             mov [rdi], ax
    263.             and eax, 0x0ff
    264.  
    265.             stdcall draw_dig, eax, ebx
    266.             inc ebx
    267.  
    268.             mov ax, [rdi]
    269.             shr eax, 8
    270.  
    271.             stdcall draw_dig, eax, ebx
    272.  
    273.             add rdi, 2
    274.             inc ebx
    275.  
    276.         .until ebx = 6
    277.  
    278.         xor [bBlink], 1
    279.  
    280.         .if ZERO?
    281.             gdip_invoke GdipSetSolidFillColor, [hBrush], COLOR_INACTIVE
    282.         .else
    283.             gdip_invoke GdipSetSolidFillColor, [hBrush], COLOR_ACTIVE
    284.         .endif
    285.  
    286.         ; Отрисовка разделителей
    287.         gdip_invoke GdipResetWorldTransform, [hGraphics]
    288.         gdip_invoke GdipScaleWorldTransform, [hGraphics], float [fSegSize], float [fSegSize], 0
    289.         gdip_invoke GdipFillEllipse, [hGraphics], [hBrush], float dword 2.65, float dword 0.7, float dword 0.2, float dword 0.2
    290.         gdip_invoke GdipFillEllipse, [hGraphics], [hBrush], float dword 2.65, float dword 1.3, float dword 0.2, float dword 0.2
    291.         gdip_invoke GdipFillEllipse, [hGraphics], [hBrush], float dword 5.65, float dword 0.7, float dword 0.2, float dword 0.2
    292.         gdip_invoke GdipFillEllipse, [hGraphics], [hBrush], float dword 5.65, float dword 1.3, float dword 0.2, float dword 0.2
    293.  
    294.         mov qword [tPT], 0
    295.         mov [dwBF], 0x01ff0000    ; BLENDFUNCTION SRC_ALPHA
    296.  
    297.         bool_invoke UpdateLayeredWindow, [hWnd], 0, 0, rcWindow.right, [hDC], addr tPT, 0, addr dwBF, ULW_ALPHA
    298.         bool_invoke SetWindowPos, [hWnd], HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOREDRAW
    299.  
    300.     .elseif rdx = WM_LBUTTONDOWN
    301.  
    302.         bool_invoke ReleaseCapture
    303.         invoke SendMessage, [hWnd], WM_NCLBUTTONDOWN, 2, 0
    304.  
    305.     .elseif rdx = WM_CLOSE
    306.         jmp .destroy_dialog
    307.     .elseif rdx = WM_INITDIALOG
    308.  
    309.         bool_invoke GetClientRect, [hWnd], rcWindow
    310.  
    311.         cvtsi2ss xmm0, [rcWindow.bottom]
    312.         mov eax, 0.45
    313.         movd xmm1, eax
    314.         mulss xmm0, xmm1
    315.         movss [fSegSize], xmm0
    316.  
    317.         invoke GetDC, 0
    318.  
    319.         .if ~rax
    320.             jmp .destroy_dialog
    321. .release_dc_and_destroy:
    322.             invoke ReleaseDC, [hDCTemp], 0
    323.             jmp .destroy_dialog
    324.         .else
    325.  
    326.             mov [hDCTemp], rax
    327.             invoke CreateCompatibleDC, rax
    328.  
    329.             .if ~rax
    330.                 jmp .release_dc_and_destroy
    331.             .else
    332.  
    333.                 mov [hDC], rax
    334.                 invoke CreateCompatibleBitmap, [hDCTemp], [rcWindow.right], [rcWindow.bottom]
    335.  
    336.                 .if ~rax
    337.                     jmp .release_dc_and_destroy
    338.                 .else
    339.                     mov [hBitmap], rax
    340.                 .endif
    341.  
    342.                 invoke SelectObject, [hDC], rax
    343.  
    344.                 .if ~rax
    345.                     jmp .release_dc_and_destroy
    346.                 .endif
    347.  
    348.             .endif
    349.  
    350.             invoke ReleaseDC, [hDCTemp], 0
    351.  
    352.         .endif
    353.  
    354.         gdip_invoke GdipCreateFromHDC, [hDC], hGraphics
    355.         gdip_invoke GdipSetSmoothingMode, [hGraphics], 4
    356.         gdip_invoke GdipCreateSolidFill, 0, hBrush
    357.  
    358.         bool_invoke SetTimer, [hWnd], TIMER_ID, 500, 0
    359.  
    360.     .elseif rdx = WM_LBUTTONDBLCLK
    361.  
    362. .destroy_dialog:
    363. .error_handler:
    364.  
    365.         invoke EndDialog, [hWnd], 0
    366.  
    367.     .endif
    368.  
    369.     xor eax, eax
    370.  
    371.     ret
    372.  
    373. endp
    374.  
    375. proc main
    376.  
    377.     gdip_invoke GdiplusStartup, hGdipToken, g_gdip_input, 0
    378.  
    379.     invoke DialogBoxIndirectParam, 0, g_dlg_template, 0, dlg_proc, 0
    380.  
    381. .error_handler:
    382.  
    383.     .if [hBrush]
    384.         invoke GdipDeleteBrush, [hBrush]
    385.     .endif
    386.  
    387.     .if [hDC]
    388.         invoke SelectObject, [hDC], [hOldBmp]
    389.         invoke DeleteDC, [hDC]
    390.     .endif
    391.  
    392.     .if [hGraphics]
    393.         invoke GdipDeleteGraphics, [hGraphics]
    394.     .endif
    395.  
    396.     .if [hBitmap]
    397.         invoke DeleteObject, [hBitmap]
    398.     .endif
    399.  
    400.     .if [hGdipToken]
    401.         invoke GdiplusShutdown, [hGdipToken]
    402.     .endif
    403.  
    404.     invoke ExitProcess, 0
    405.  
    406. endp
    clock.png
     

    Вложения:

    • 7seg_clock.zip
      Размер файла:
      3,1 КБ
      Просмотров:
      122
    Marylin, GRAFik и Mikl___ нравится это.
  3. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Thetrik, я уже как-то привык к вашей ФАСМо-ассемблерной виртуозности, но тем не менее, не перестаю удивляться. Спасибо за код. Mikl___'у тоже спасибо за MASM'овский код. В общем, тред\ветка - удалась, ничего не скажешь. Еще раз всем спасибо.

    P.S. Thetrik, вы Манхантеру для его блога эти часы продайте - он такие вещи любит. Единственное, что может его смутить, так это разрядность x64 - он, по-моему, в ней еще не разобрался. :)
     
  4. Rbnz

    Rbnz New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2020
    Сообщения:
    27
    Интересный вариант 7seg_clock, но несколько усложнённая реализация.
    ----
    Убираем макросы, создающие паразитный код, упрощаем алгоритм, максимум вычислений - локально, без вызова внешних функций.
    В результате
    Код (ASM):
    1. format PE64 GUI 5.0 at 140000000h
    2. entry main
    3.  
    4. include "win64a.inc"
    5.  
    6. WINDOW_HEIGHT       equ 34
    7. TIMER_ID            equ 7
    8. COLOR_              equ 0C000AF70h
    9. X_scale             equ 30.0
    10. Y_scale             equ 27.0
    11.  
    12. macro gcall prg* {
    13.   common
    14.     call    prg
    15.     if defined checkgp
    16.         test    eax, eax
    17.         jnz     .error_handler
    18.     end if
    19. }
    20. macro bcall prg* {
    21.   common
    22.     call    prg
    23.     if defined checkgp
    24.         test    eax, eax
    25.         jz     .error_handler
    26.     end if
    27. }
    28.  
    29. ;    checkgp             equ 1
    30. ; --------------------
    31. hWnd        equ 40
    32. dpFrame$    equ 88
    33.  
    34. align 8
    35. dlg_proc:
    36.  
    37.     push    rbx
    38.     push    rbp
    39.     push    rsi
    40.     push    rdi
    41.     add     rsp, -dpFrame$
    42.  
    43.     lea     rdi, [rsp+32]
    44.     mov     [rdi+hWnd],rcx
    45.  
    46.     cmp     dx, WM_TIMER
    47.     jne     .next1
    48. .timer:
    49.     call    draw_dig
    50.  
    51.     lea     rax, [rsi+24]
    52.     xor     edx, edx
    53.     xor     r8d, r8d
    54.     movups  xmm0,[rax]
    55.     movups  xmm1,[rax+16]
    56.     lea     r9,  [rax+40]
    57.     movaps  [rdi],xmm0
    58.     movaps  [rdi+16],xmm1
    59.     mov     qword [rdi+32],ULW_ALPHA
    60.     mov     rcx, [rdi+hWnd]
    61.     bcall   [UpdateLayeredWindow]
    62.  
    63. align 8
    64. .dpret:
    65.     xor     eax, eax
    66.     add     rsp, dpFrame$
    67.     pop     rdi
    68.     pop     rsi
    69.     pop     rbp
    70.     pop     rbx
    71.     ret
    72. .next1:
    73.     cmp     dx, WM_LBUTTONDOWN
    74.     jne     .next2
    75. .lbuttondown:
    76.     mov     edx, WM_NCLBUTTONDOWN
    77.     mov     r8d, 2
    78.     xor     r9d, r9d
    79.     call    [SendMessageA]
    80.     jmp     .dpret
    81. .next2:
    82.     cmp     dx, WM_LBUTTONDBLCLK
    83.     je      .error_handler
    84.     cmp     dx, WM_INITDIALOG
    85.     je      initdialog
    86.     cmp     dx, WM_CLOSE
    87.     jne     .dpret
    88. .error_handler:
    89. if defined checkgp
    90.     mov     rcx, [rdi+hWnd]
    91. end if
    92.     xor     edx, edx
    93.     call    [EndDialog]
    94.     jmp     .dpret
    95. ; --------------------
    96. ddFrame$    equ 144
    97. align 8
    98. draw_dig:
    99.     push    rdi
    100.     movaps  [rsp-16],xmm6
    101.     add     rsp, - ddFrame$
    102.  
    103.     lea     rsi, [hGraphics]
    104.     lea     rbp, [rsp+40]
    105.     lea     rdx, [rsi + Matrix0 - hGraphics]
    106.     and     qword [rdx + 32],0
    107.     mov     rcx, [rsi]
    108.     call    [GdipSetWorldTransform]
    109.  
    110.     lea     rcx, [rbp+32]
    111.     call    [GetLocalTime]
    112.     lea     rax, [rsi + k0_2  - hGraphics]
    113.     movddup xmm0,qword [rax]
    114.     movddup xmm6,qword [rax + k0_7  - k0_2]
    115.     mov     rbx, qword [rax + k2_65 - k0_2]
    116.     movaps  [rbp-8],xmm0
    117.     mov     byte [rbp+8],1
    118.  
    119.     mov     dx, [rbp+44]
    120.     cmp     word [rax + second - k0_2],dx
    121.     mov     word [rax + second - k0_2],dx
    122.     jne     .grclear
    123.     xor     edi, edi
    124.     shr     rbx, 32
    125.     jmp     .drawel
    126.  
    127. .grclear:
    128.     mov     edx, 1000000h
    129.     mov     rcx, [rsi]
    130.     gcall   [GdipGraphicsClear]
    131.  
    132.     mov     byte [rbp+8],2
    133.     mov     [rbp+16],rax
    134.     lea     rdx, [rbp+40]
    135.     lea     rdi, [segments]
    136.     mov     [rbp+24],rdx
    137.  
    138. .loopfills:
    139.     mov     cl, 10
    140.     mov     al, 2
    141.     xadd    [rbp+24], rax
    142.     mov     ax, [rax]
    143.     div     cl
    144.     movzx   edx, al
    145.     movzx   eax, ah
    146.     mov     dl, [rdi+rdx]
    147.     mov     al, [rdi+rax]
    148.     shl     eax, 7
    149.     or      eax, edx
    150.     or      [rbp+16],rax
    151.     ror     qword [rbp+16],14
    152.     cmp     byte [rbp+8],0
    153.     je      .setpdr
    154. .drawel:
    155.     mov     rcx, [rsi]
    156.     mov     rdx, [rsi+8]
    157.     movd    xmm2,ebx
    158.     movss   xmm3,xmm6
    159.     gcall   [GdipFillEllipse]
    160.     psrldq  xmm6,4
    161.     dec     byte [rbp+8]
    162.     js      .error_handler
    163.     test    edi, edi
    164.     jz      .drawel
    165.     jmp     .loopfills
    166.  
    167. .setpdr:
    168.     shr     qword [rbp+16], 22
    169.     lea     rbx, [Matrix0]
    170.     mov     eax, 6
    171.     mov     [rbp],rax
    172.     lea     rdi, [rbp+24]
    173.     lea     ecx, [eax+3]
    174.     movlps  xmm6, qword [rbx - Matrix0 + scale]
    175.     add     rsi, -72
    176.     rep     movsq
    177.     add     rdi, -72
    178.     jmp    .shift
    179. align 16
    180. .loopfilln:
    181.     movlps  xmm0,[rdi]
    182.     mulps   xmm0, xmm6
    183.     movlps  qword [rbx + 32],xmm0
    184.     mov     rcx, [rsi]
    185.     mov     rdx, rbx
    186.     gcall   [GdipSetWorldTransform]
    187.  
    188.     mov     rcx,[rsi]
    189.     mov     rdx,[rsi+8]
    190.     lea     r8, [spoints]
    191.     mov     r9d, 6
    192.     gcall   [GdipFillPolygon2]
    193.  
    194. align 8
    195. .decCnt:
    196.     add     rdi, 8
    197.     dec     byte [rbp]
    198.     js      .nextNumber
    199.     lea     rdx, [rbx+40]
    200.     cmp     byte [rbp],3
    201.     cmove   rbx, rdx
    202. .shift:
    203.     shr     qword [rbp+16],1
    204.     jc      .loopfilln
    205.     jmp     .decCnt
    206. .nextNumber:
    207.     cmp     [rbp+16],rax
    208.     je      .error_handler
    209.     mov     byte [rbp],6
    210.     lea     rbx, [Matrix0]
    211.     ror     qword [rdi+8],32
    212.     movss   xmm1, [rdi+8]
    213.     mov     ecx, 4
    214.     add     rdi, -56
    215. .loopadd:
    216.     movddup xmm0,xmm1
    217.     addps   xmm0,[rdi+rax]
    218.     movaps  [rdi+rax],xmm0
    219.     add     al, 16
    220.     loop    .loopadd
    221.     jmp     .shift
    222. .error_handler:
    223.     add     rsp, ddFrame$
    224.     movaps  xmm6,[rsp-16]
    225.     pop     rdi
    226.     ret
    227. ; --------------------
    228. mFrame$     equ 88
    229. hGdipToken  equ 40
    230.  
    231. main:
    232.     add     rsp, -mFrame$
    233.     lea     rcx, [rsp+hGdipToken]
    234.     lea     rdx, [rcx+8]
    235.     mov     dword [rdx], 1
    236.     movups  [rdx+8], xmm0
    237.     xor     r8d, r8d
    238.     gcall   [GdiplusStartup]
    239.     lea     rdx, [dlg_template]
    240.     xor     ecx, ecx
    241.     lea     r9,  [dlg_proc]
    242.     xor     r8d, r8d
    243.     call    [DialogBoxIndirectParamA]
    244. .error_handler:
    245.     mov     rcx, [hBrush]
    246.     test    ecx, ecx
    247.     jz      .clk0001
    248.     call    [GdipDeleteBrush]
    249. .clk0001:
    250.     mov     rcx, [hGraphics]
    251.     test    ecx, ecx
    252.     jz      .clk0002
    253.     call    [GdipDeleteGraphics]
    254. .clk0002:
    255.     mov     rcx, [rsp+hGdipToken]
    256.     test    ecx, ecx
    257.     jz      .clk0003
    258.     call    [GdiplusShutdown]
    259. .clk0003:
    260.     mov     rcx, [hDC]
    261.     test    ecx, ecx
    262.     jz      .clkexit
    263.     mov     rdx, [hOldBmp]
    264.     call    [SelectObject]
    265.     mov     rcx, rax
    266.     call    [DeleteObject]
    267.     mov     rcx, [hDC]
    268.     call    [DeleteDC]
    269. .clkexit:
    270.     xor     ecx, ecx
    271.     add     rsp, mFrame$
    272.     jmp     [ExitProcess]
    273. ; --------------------
    274. align 8
    275. initdialog:
    276.     lea     rdx, [rcWindow]
    277.     mov     rbp, rdx
    278.     bcall   [GetClientRect]
    279.     xor     ecx, ecx
    280.     call    [GetDC]
    281.  
    282. if defined checkgp
    283.     test    eax, eax
    284.     jz      dlg_proc.error_handler
    285. end if
    286.  
    287.     mov     rcx, rax
    288.     mov     rsi, rax
    289.     call    [CreateCompatibleDC]
    290.  
    291. if defined checkgp
    292.     test    eax, eax
    293.     jnz     .mkbmp
    294. .release_dc_and_destroy:
    295.     mov     rcx, rsi
    296.     xor     edx, edx
    297.     call    [ReleaseDC]
    298.     jmp     dlg_proc.error_handler
    299. .mkbmp:
    300. end if
    301.  
    302.     mov     [hDC], rax
    303.     mov     rbx, rax
    304.     mov     rcx, rsi
    305.     mov     edx, [rbp+RECT.right]
    306.     mov     r8d, [rbp+RECT.bottom]
    307.     call    [CreateCompatibleBitmap]
    308.  
    309. if defined checkgp
    310.     test    eax, eax
    311.     jz      .release_dc_and_destroy
    312. end if
    313.  
    314.     mov     rdx, rax
    315.     mov     rcx, rbx
    316.     call    [SelectObject]
    317.     mov     [rbp - (rcWindow -hOldBmp)],rax
    318.     mov     rcx,rsi
    319.     xor     edx, edx
    320.     call    [ReleaseDC]
    321.     mov     rcx, rbx
    322.     lea     rdx, [hGraphics]
    323.     mov     rsi, rdx
    324.     gcall   [GdipCreateFromHDC]
    325.     mov     rcx,[rsi]
    326.     mov     edx, 4
    327.     gcall   [GdipSetSmoothingMode]
    328.     xor     ecx, ecx
    329.     lea     rdx, [rsi+8]
    330.     gcall   [GdipCreateSolidFill]
    331.  
    332.     mov     edx, COLOR_
    333.     mov     rcx, [rsi+8]
    334.     gcall   [GdipSetSolidFillColor]
    335.  
    336.     mov     rcx, [rdi+hWnd]
    337.     or      rdx, -1
    338.     xor     r8d, r8d
    339.     xor     r9d, r9d
    340.     movaps  [rdi],xmm0
    341.     mov     dword [rdi+16], SWP_NOMOVE or SWP_NOSIZE or SWP_NOREDRAW or SWP_NOSENDCHANGING
    342.     bcall   [SetWindowPos]
    343.  
    344.     mov     rcx, [rdi+hWnd]
    345.     mov     edx, TIMER_ID
    346.     mov     r8d, 500
    347.     xor     r9d, r9d
    348.     call   [SetTimer]
    349.     jmp     dlg_proc.timer
    350. if defined checkgp
    351. .error_handler:
    352.     jmp     dlg_proc.error_handler
    353. end if
    354. ; --------------------
    355. align 8
    356. segments:
    357.             db 7Bh,60h,37h, 67h, 6Ch, 4Fh, 5Fh, 62h, 7Fh, 6Fh
    358. align 8
    359. spoints:    dd 0.1, 0.1, 0.2, 0.0, 0.8, 0.0, 0.9, 0.1, 0.8, 0.2, 0.2, 0.2
    360. spos:       dd  0.1,2.0, 0.1,0.0, 0.1,1.0, 0.2,0.1, 0.2,1.1, 1.2,0.1, 1.2,1.1
    361.             dd 0,0, 1.7,1.3
    362. hGraphics   dq 0
    363. hBrush      dq 0
    364. hOldBmp     dq 0
    365. hDC         dq 0
    366. tPT         dq PTs
    367. PTs         dq 0
    368. dwBF        dq BF
    369. rcWindow  RECT 0,0,0,0
    370. scale       dd X_scale,Y_scale
    371. align 16
    372. Matrix0     dd 1.0
    373.             dd 0
    374.             dd 1952533809
    375.             dd -1
    376.             dd X_scale
    377.             dd 0
    378.             dd 0
    379.             dd Y_scale
    380.             dd 0
    381.             dd 0
    382. Matrix90    dd 1.0
    383.             dd 0
    384.             dd 1952533809
    385.             dd -1
    386.             dd 0
    387.             dd Y_scale
    388.             dd -X_scale
    389.             dd 0
    390.             dd 0
    391.             dd 0
    392. BF          dd 1FF0000h
    393. align 8
    394. k0_2        dd 0.2
    395.             dd 0
    396. k0_7        dd 0.7
    397. k1_3        dd 1.3
    398. k2_65       dd 2.65
    399. k5_65       dd 5.65
    400. second      dw 0
    401.  
    402. align 4
    403. dlg_template:
    404.     dd DS_CENTER or WS_POPUP, WS_EX_LAYERED
    405.     dw 0,0,0, WINDOW_HEIGHT * 385 / 100, WINDOW_HEIGHT, 0,0
    406.     du 'SClock',0
    407. ; --------------------
    408.  
    409.   data import
    410.  
    411. library kernel32, 'kernel32', \
    412.         gdi32, 'gdi32', \
    413.         user32, 'user32', \
    414.         gdiplus, 'gdiplus'
    415.  
    416. import kernel32, \
    417.        GetLocalTime, 'GetLocalTime', \
    418.        ExitProcess, 'ExitProcess'
    419.  
    420. import gdi32, \
    421.        CreateCompatibleBitmap, 'CreateCompatibleBitmap', \
    422.        CreateCompatibleDC, 'CreateCompatibleDC', \
    423.        SelectObject, 'SelectObject', \
    424.        DeleteObject, 'DeleteObject', \
    425.        DeleteDC, 'DeleteDC'
    426.  
    427. import user32, \
    428.        DialogBoxIndirectParamA, 'DialogBoxIndirectParamA', \
    429.        EndDialog, 'EndDialog', \
    430.        GetClientRect, 'GetClientRect', \
    431.        SetTimer, 'SetTimer', \
    432.        UpdateLayeredWindow, 'UpdateLayeredWindow', \
    433.        GetDC, 'GetDC', \
    434.        ReleaseDC, 'ReleaseDC', \
    435.        SendMessageA, 'SendMessageA', \
    436.        SetWindowPos, 'SetWindowPos'
    437.  
    438. import gdiplus, \
    439.        GdiplusStartup, 'GdiplusStartup', \
    440.        GdiplusShutdown, 'GdiplusShutdown', \
    441.        GdipSetSmoothingMode, 'GdipSetSmoothingMode', \
    442.        GdipCreateFromHDC, 'GdipCreateFromHDC', \
    443.        GdipGraphicsClear, 'GdipGraphicsClear', \
    444.        GdipCreateSolidFill, 'GdipCreateSolidFill', \
    445.        GdipSetSolidFillColor, 'GdipSetSolidFillColor', \
    446.        GdipFillEllipse, 'GdipFillEllipse', \
    447.        GdipSetWorldTransform, 'GdipSetWorldTransform', \
    448.        GdipFillPolygon2, 'GdipFillPolygon2', \
    449.        GdipDeleteBrush, 'GdipDeleteBrush', \
    450.        GdipDeleteGraphics, 'GdipDeleteGraphics'
    451. end data
    исполняемый файл худеет вдвое

    Если немного подшаманить заголовок и ужать, то и втрое
     

    Вложения:

    • Clock7.zip
      Размер файла:
      4,4 КБ
      Просмотров:
      79
    • Clock7.exe.zip
      Размер файла:
      1,8 КБ
      Просмотров:
      79
    Marylin, Thetrik и alex_dz нравится это.
  5. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    875
    Rbnz, нет обработки ошибок, для уменьшения размера можно убрать еще очистку ресурсов которая в любом случае будет при завершении приложения.
     
  6. Rbnz

    Rbnz New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2020
    Сообщения:
    27
    Нет ошибок, нет и обработки. ) При надобности можно разкомментировать 29ю строку кода и она появится.
    Без очистки ресурсов - не есть хорошо. Безболезненно можно укротить :
    Код (Text):
    1. ;    xor     ecx, ecx
    2.    mov    ecx, COLOR_
    3.    lea     rdx, [rsi+8]
    4.    gcall   [GdipCreateSolidFill]
    5. ;    mov     edx, COLOR_
    6. ;    mov     rcx, [rsi+8]
    7. ;    gcall   [GdipSetSolidFillColor]
     
    Последнее редактирование: 26 окт 2024
  7. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    48
    Rbnz

    Да, файл ужмется таки да....
    Но память процесса таки будет 8192 в обеих случаях
    Но файл таки ужмется, токо не на диске...
    Вообще занятно..
    Покрутил Clock7.exe.zip
    Занятная ручная работа (доработка с Импортом )
    восстановил СЖАМКАННЫЕ функции:

    <Function CALL [DWORD]: 16 >

    4000031B => 14000031B и т.д.

    0 4000031B KERNEL32.GetLocalTime
    1 400005DA USER32.GetClientRect
    2 40000623 USER32.ReleaseDC
    3 40000677 USER32.SetTimer
    4 400005E2 USER32.GetDC
    5 400002F8 USER32.SendMessageA
    6 4000029C USER32.UpdateLayeredWindow
    7 40000302 USER32.EndDialog
    8 400002BA USER32.SetWindowPos
    9 400001E6 USER32.DialogBoxIndirectParamA
    10 40000238 GDI32.DeleteObject
    11 40000245 GDI32.DeleteDC
    12 40000614 GDI32.SelectObject
    13 4000022F GDI32.SelectObject
    14 400005EE GDI32.CreateCompatibleDC
    15 40000608 GDI32.CreateCompatibleBitmap

    также и все gcall для GDI...

    gdiplus

    GdiplusStartup
    GdiplusShutdown
    GdipSetSmoothingMode
    GdipDeleteGraphics
    GdipCreateFromHDC
    GdipGraphicsClear
    GdipCreateSolidFill
    GdipDeleteBrush
    GdipFillEllipse
    GdipTranslateWorldTransform
    GdipRotateWorldTransform
    GdipFillPolygon2
    GdipSetSolidFillColor
    GdipSetWorldTransform

    14 функций
    В Clock7.zip меньше
    import gdiplus, \
    GdiplusStartup, 'GdiplusStartup', \
    GdiplusShutdown, 'GdiplusShutdown', \
    GdipSetSmoothingMode, 'GdipSetSmoothingMode', \
    GdipCreateFromHDC, 'GdipCreateFromHDC', \
    GdipGraphicsClear, 'GdipGraphicsClear', \
    GdipCreateSolidFill, 'GdipCreateSolidFill', \
    GdipSetSolidFillColor, 'GdipSetSolidFillColor', \
    GdipFillEllipse, 'GdipFillEllipse', \
    GdipSetWorldTransform, 'GdipSetWorldTransform', \
    GdipFillPolygon2, 'GdipFillPolygon2', \
    GdipDeleteBrush, 'GdipDeleteBrush', \
    GdipDeleteGraphics, 'GdipDeleteGraphics'

    На Windows 10 LTSC грузит DLL:

    Модули процесса: 33

    0: Clock7.exe
    140000000-ImageBase 1400000D0-OEP 00001004-ImageSize (4 100)
    1: ntdll.dll
    7FF917470000-ImageBase 00000000-OEP 001EE000-ImageSize (2 023 424)
    2: KERNEL32.DLL
    7FF915000000-ImageBase 7FF915017B60-OEP 000B3000-ImageSize (733 184)
    3: KERNELBASE.dll
    7FF9141B0000-ImageBase 7FF9141CB7D0-OEP 0029D000-ImageSize (2 740 224)
    4: gdi32.DLL
    7FF917270000-ImageBase 7FF917274110-OEP 00029000-ImageSize (167 936)
    5: gdi32full.dll
    7FF914000000-ImageBase 7FF9140402E0-OEP 001A7000-ImageSize (1 732 608)
    6: msvcp_win.dll
    7FF913F60000-ImageBase 7FF913F733F0-OEP 000A0000-ImageSize (655 360)
    7: ucrtbase.dll
    7FF9144D0000-ImageBase 7FF9144E1E00-OEP 000FA000-ImageSize (1 024 000)
    8: USER32.dll
    7FF917020000-ImageBase 7FF91702F500-OEP 00197000-ImageSize (1 667 072)
    9: win32u.dll
    7FF9144B0000-ImageBase 00000000-OEP 00020000-ImageSize (131 072)
    10: IMM32.DLL
    7FF9150C0000-ImageBase 7FF9150C15F0-OEP 0002E000-ImageSize (188 416)
    11: gdiplus.DLL
    7FF8EFC70000-ImageBase 7FF8EFCC6E90-OEP 001A4000-ImageSize (1 720 320)
    12: msvcrt.dll
    7FF914690000-ImageBase 7FF9146978B0-OEP 0009E000-ImageSize (647 168)
    13: combase.dll
    7FF914C10000-ImageBase 7FF914CEFF50-OEP 0032A000-ImageSize (3 317 760)
    14: RPCRT4.dll
    7FF917320000-ImageBase 7FF917379A70-OEP 00118000-ImageSize (1 146 880)
    15: bcryptPrimitives.dll
    7FF9145D0000-ImageBase 7FF9146086A0-OEP 00082000-ImageSize (532 480)
    16: uxtheme.dll
    7FF911950000-ImageBase 7FF911977E40-OEP 0009C000-ImageSize (638 976)
    17: MSCTF.dll
    7FF916BE0000-ImageBase 7FF916C26410-OEP 0016C000-ImageSize (1 490 944)
    18: sechost.dll
    7FF914F40000-ImageBase 7FF914F5F770-OEP 000A2000-ImageSize (663 552)
    19: bcrypt.dll
    7FF914660000-ImageBase 7FF914668E70-OEP 00026000-ImageSize (155 648)
    20: OLEAUT32.dll
    7FF916DB0000-ImageBase 7FF916DCD7D0-OEP 000C4000-ImageSize (802 816)
    21: ADVAPI32.dll
    7FF9166B0000-ImageBase 7FF9166C4230-OEP 000A8000-ImageSize (688 128)
    22: kernel.appcore.dll
    7FF913480000-ImageBase 7FF913483BA0-OEP 00011000-ImageSize (69 632)
    23: TextInputFramework.dll
    7FF903D50000-ImageBase 7FF903D77A20-OEP 00093000-ImageSize (602 112)
    24: CoreUIComponents.dll
    7FF90B8C0000-ImageBase 7FF90B93D560-OEP 00320000-ImageSize (3 276 800)
    25: CoreMessaging.dll
    7FF90FEF0000-ImageBase 7FF90FF43030-OEP 000E1000-ImageSize (921 600)
    26: SHCORE.dll
    7FF9171C0000-ImageBase 7FF9171FB2F0-OEP 000A7000-ImageSize (684 032)
    27: ntmarta.dll
    7FF9127C0000-ImageBase 7FF9127C7090-OEP 00031000-ImageSize (200 704)
    28: wintypes.dll
    7FF910700000-ImageBase 7FF91072AEA0-OEP 00151000-ImageSize (1 380 352)
    29: dwmapi.dll
    7FF911A40000-ImageBase 7FF911A43670-OEP 0002E000-ImageSize (188 416)
    30: CRYPT32.dll
    7FF913C40000-ImageBase 7FF913C8FA10-OEP 001FE000-ImageSize (2 088 960)
    31: MSASN1.dll
    7FF9134A0000-ImageBase 7FF9134A5A20-OEP 00012000-ImageSize (73 728)
    32: CRYPTSP.dll
    7FF913F40000-ImageBase 7FF913F448D0-OEP 0001B000-ImageSize (110 592)

    Понравилось
     
  8. Rbnz

    Rbnz New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2020
    Сообщения:
    27
    vitokop,
    Все эти 32 dll пользует система.
    Сама прог. напрямую использует 4: kernel32, gdi32, user32, gdiplus. Они есть в секции импорта
    --
    разница вариантов в том, что Thetrik, использует функции GDI+ для трансформации координат и масштабирования. В моём варианте - напрямую обработка матрицы трансформации, а функций для трансформации - всего 1 (GdipSetWorldTransform) и отрисовка 2: GdipFillPolygon2 и GdipFillEllipse

    Ужаты1й файл: бинарник. Заголовок сокращён, каталогов ВООБЩЕ в нём нет.
    Секция импорта так же отсутствует. Вручную она занимает меньше места. И если скомпрессить код чем то типа LZH... такое и получается
     
    Последнее редактирование: 26 окт 2024
    Mikl___ нравится это.
  9. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    Это не память процесса, а страниц только в конкретном его модуле.
    Глобальная память зависит от кол-ва дескрипторов в древе VAD процесса.
    Например для "7seg_clock.exe" система выделила аж 380 вирт.страниц (1.5МБ), которые прописаны в VAD:

    Код (Text):
    1. 0: kd> !process 0 1 7seg_clock.exe
    2. PROCESS fffffa80023fd060
    3.     Cid: 0554   Peb: 7fffffdd000   ParentCid: 0b88
    4.     VadRoot: fffffa80033d3b80  Vads: 67  Private: 380  <------//
    5.  
    6. 0: kd> !vm
    7.     Total Private:        374279 ( 1497116 Kb)
    8.     06b0  explorer.exe      6635 (   26540 Kb)
    9.     0334  Totalcmd.exe      2535 (   10140 Kb)
    10.     00d8  AkelPad.exe        887 (    3548 Kb)
    11.     066c  livekd64.exe       669 (    2676 Kb)
    12.     0974  FASMW.EXE          475 (    1900 Kb)
    13.     063c  7seg_clock.exe     380 (    1520 Kb) <-------//
    14.     0004  System              30 (     120 Kb)
    То-есть можно запихать все секции в одну, но это экономия на спичках, т.к. особо не повлият на общий размер процесса. А "Clock7.exe" на моей Win7.x64 падает каждый раз с разными ошибками:

    upload_2024-10-27_8-11-21.png
     
  10. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
  11. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    48
    Rbnz
    ..На доработку показывет NT Headers файла:
    //+++++++++ => должны УДОВЛЕТВОРЯТЬ Загрузчику Windows

    Процес: D:\masm41\example\Часы\Clock\Clock7.exe
    Модуль:

    IMAGE_DOS_HEADER
    0000: 5A4D { Magic number if ('MZ') 0x5A4D then DOS} //+++++++++++
    0002: 0000 { Bytes on last page of file }
    ....................................................................
    000E: 0000 { Initial (relative) SS value }
    0010: 4550 { Initial SP value } //++++++++++==> Signatura NT: NT Hreaders
    0012: 0000 { Checksum }
    0014: 8664 { Initial IP value } //++++++++ 8664 { Machine its: x64 }
    Далее смотри IMAGE_NТ_HEADER
    .....................................................................
    003A: 0000 { Reserved word }
    003C: 00000010 { File address of new exe header } //++++++++++ ==> NT Hreaders

    IMAGE_NТ_HEADER
    0010: 00004550 { Signature if 0x00004550 then PE}
    0014: 8664 { Machine its: x64 }
    0016: 0001 { NumberOfSections }
    0018: 671C8568 { TimeDateStamp = 10/26/2024 09:00:08 }
    001C: 00000000 { PointerToSymbolTable }
    0020: 00000000 { NumberOfSymbols }
    0024: 0080 { SizeOfOptionalHeader }
    0026: 022F { Characteristics } //+++++++++
    { $0001 Relocation info stripped from file } //+++++++++
    { $0002 File is executable (i.e. no unresolved externel references) } //+++++++++
    { $0004 Line numbers stripped from file }
    { $0008 Local symbols stripped from file }
    { $0020 Application can handle > 2GB address}
    { $0200 Debugging info stripped from file in .DBG file }

    IMAGE_OPTION_HEADER
    0028: 020B { Magic PE32+}
    002A: 0E { MajorLinkerVersion }
    002B: 00 { MinorLinkerVersion }
    { LinkerVersion = 14.0 }
    002C: 00000F34 { SizeOfCode }
    0030: 00000000 { SizeOfInitializedData }
    0034: 00000000 { SizeOfUninitializedData }
    0038: 000000D0 { AddressOfEntryPoint }
    003C: 00000010 { BaseOfCode } //++
    0040: 0000000140000000 { ImageBase }
    0048: 00000010 { SectionAlignment } //++
    004C: 00000010 { FileAlignment } //++
    0050: 0006 { MajorOperatingSystemVersion }
    0052: 0000 { MinorOperatingSystemVersion }
    { OperatingSystemVersion = 6.00 }
    0054: 0000 { MajorImageVersion }
    0056: 0000 { MinorImageVersion }
    { ImageVersion = 0.00 }
    0058: 0006 { MajorSubsystemVersion }
    005A: 0000 { MinorSubsystemVersion }
    { SubsystemVersion = 6.00 }
    005C: 00000000 { Reserved1 }
    0060: 00001004 { SizeOfImage } //+++++
    0064: 000000D0 { SizeOfHeaders } //++++++
    0068: 000030F2 { CheckSum } //+++ ==> !!!!
    006C: 0002 { Subsystem: Image runs in the Windows GUI subsystem} //++++++
    006E: 0000 { DllCharacteristics }
    0070: 0000000000100000 { SizeOfStackReserve }
    0078: 0000000000001000 { SizeOfStackCommit }
    0080: 0000000000100000 { SizeOfHeapReserve }
    0088: 0000000000001000 { SizeOfHeapCommit }
    0090: 00000000 { LoaderFlags }
    0094: 00000000 { NumberOfRvaAndSizes }
    { IMAGE_DATA_DIRECTORY }
    0 - Таблица экспорта
    0098: 00000000 { N=0 VirtualAddress } //++++++++ !!
    009C: 00000000 { N=0 Size } //++++++++ !!
    1 - Таблица импорта
    00A0: 00000000 { N=1 VirtualAddress } //++++++++ !!
    00A4: 00000000 { N=1 Size } //++++++++ !!
    2 - Таблица ресурсов
    00A8: 7865742E { N=2 VirtualAddress }
    00AC: 00000074 { N=2 Size }
    3 - Таблица исключений
    00B0: 00000956 { N=3 VirtualAddress }
    00B4: 000000D0 { N=3 Size }
    4 - Таблица гарантий (SECURITY)
    00B8: 00000F34 { N=4 VirtualAddress }
    00BC: 000000D0 { N=4 Size }
    5 - Таблица настройки адресов
    00C0: 00000000 { N=5 VirtualAddress } //++++++++ !!
    00C4: 00000000 { N=5 Size } //++++++++ !!
    6 - Таблица отладочной информации (DEBUG )
    00C8: 00000000 { N=6 VirtualAddress }
    00CC: E0000020 { N=6 Size }
    7 - Таблица строк описаний (COPYRIGHT or ARCHITECTURE)
    00D0: 26358D48 { N=7 VirtualAddress }
    00D4: 66000000 { N=7 Size }
    8 - IMAGE_DIRECTORY_ENTRY_GLOBALPTR
    00D8: ACD4EBB9 { N=8 VirtualAddress }
    00DC: 0928BA56 { N=8 Size }
    9 - IMAGE_DIRECTORY_ENTRY_TLS
    00E0: DB310000 { N=9 VirtualAddress }
    00E4: 5FC11966 { N=9 Size }
    10 - IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
    00E8: 89ACC588 { N=10 VirtualAddress }
    00EC: 40C0D2C5 { N=10 Size }
    11 - IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
    00F0: CB30CDD2 { N=11 VirtualAddress }
    00F4: 30C5440F { N=11 Size }
    12 - IMAGE_DIRECTORY_ENTRY_IAT (Import Address Table)
    00F8: CAFFAAE8 { N=12 VirtualAddress }
    00FC: 8D48EA75 { N=12 Size }
    13 - IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
    0100: 0009233D { N=13 VirtualAddress }
    0104: 00BBB900 { N=13 Size }
    14 - IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTIOR
    0108: 8D480000 { N=14 VirtualAddress }
    010C: 00009D35 { N=14 Size }
    15 - Недокументирована
    0110: F3575600 { N=15 VirtualAddress }
    0114: 5F5EA548 { N=15 Size }

    Адрес секции .text находим по __ImageFirstSection64:

    function FieldOffset(const Struc; const Field): Cardinal;
    begin
    Result := Cardinal(@Field) - Cardinal(@Struc);
    end;
    function __ImageFirstSection64(NtHeader: PImageNtHeaders64): PImageSectionHeader;
    begin
    Result := Pointer( Cardinal(NtHeader) +
    FieldOffset(NtHeader^, NtHeader^.OptionalHeader) +
    NtHeader^.FileHeader.SizeOfOptionalHeader );
    end;

    SECTION HEADER #0 ==> совпадает якобы с <Таблица ресурсов>
    00A8: 7865742E
    00AC: 00000074
    00A8: {name = .text}
    00B0: 00000956 { VirtualSize }
    00B4: 000000D0 { Section RVA / VirtualAddress }
    00B8: 00000F34 { Phisical Size / SizeOfRawData }
    00BC: 000000D0 { Phisical Offset / PointerToRawData }
    00C0: 00000000 { PointerToRelocations }
    00C4: 00000000 { PointerToLinenumbers }
    00C8: 0000 { NumberOfRelocations }
    00CA: 0000 { NumberOfLinenumbers }
    00CC: E0000020 { Characteristics }
    { Section contains code }
    { Section is executable }
    { Section is readable }
    { Section is writeable } <+= !!!
    ><s><
    Нет Экспорта
    Нет Импорта
     
  12. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
  13. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    alex_dz,
    Нету ни в папке minidump системы, ни в папке отладчика x64dbg.
    В окне крэша показывает:

    Код (Text):
    1. Сигнатура проблемы:
    2.   Имя события проблемы: APPCRASH
    3.   Имя модуля с ошибкой: Clock7.exe
    4.  
    5.   Код исключения: c0000005
    6.   Смещение исключения: 000000000000040f
    7.   Версия ОС: 6.1.7601.2.1.0.256.48
    8.   Код языка: 1049
    9.   Дополнительные сведения 1: 48fd
    10.   Дополнительные сведения 2: 48fd5e1d5c4cfcb9fbf4ae6ea7a7dd6a
    11.   Дополнительные сведения 3: 2830
    12.   Дополнительные сведения 4: 2830a54577f30708e31d56de3ab1617e
     
  14. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    а ежели запустить из-под дебаггера часики?
    верняк покажет где падает

    у мну тоже Win7 SP1 x64 - пашет норм
    https://prnt.sc/9Z4aVRjilyln
     
    Rbnz нравится это.
  15. Rbnz

    Rbnz New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2020
    Сообщения:
    27
    Marylin, Win7.x64 под руками нет....
    На 8.1.x64 - проблем нет
    Несложно определить причину падения с помощью x64dbg
    --- Сообщение объединено, 27 окт 2024 ---
    vitokop, там не только экспорта и импорта нет. Вообще нет ни одного каталога. В стандартном заголовке их 16.

    Последний ужатый вариант: 1792 байта
     

    Вложения:

  16. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    Rbnz
    на WinXP запустится? (поставитвь Major 5?)
     
  17. Rbnz

    Rbnz New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2020
    Сообщения:
    27
    alex_dz, не знаю, по причине отсутствия WinXP. Метод тыка в данном случае эффективен )
     
  18. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    189
    ..несложно это как?
    Вот встаёт отладчик где-то в нёдрах ntdll, хотя в логах говорит, что это оер.
    В стеке вызовов чисто, в настройках брейк на tls снят. И что дальше?

    xdb.png
    --- Сообщение объединено, 27 окт 2024 ---
    ну и ладно.. это я просто к сведению говорю.
     
  19. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    дальше запускайте на исполнение и ловите креш?
     
  20. Rbnz

    Rbnz New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2020
    Сообщения:
    27
    Marylin, смотри вкладку "Саll Stack". В русифицированном она называется "Стек вызовов". Последний вызов из твоего файла и будет искомой точкой бага