Серия calls

Тема в разделе "WASM.NT.KERNEL", создана пользователем Ahimov, 1 май 2025.

  1. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    Привет.

    В ядре 10 на ISR:

    KiRaiseSecurityCheckFailure
    KiRaiseAssertion
    KiDebugServiceTrap

    Есть чудо код, зачем это сделано загадка, я даже не могу предположить :scratch_one-s_head:

    Код (Text):
    1. .text:000000014041010B loc_14041010B:
    2. .text:000000014041010B                 add     rsp, 8
    3. .text:000000014041010F                 call    loc_140410102
    4. .text:0000000140410114
    5. .text:0000000140410114 loc_140410114:
    6. .text:0000000140410114                 add     rsp, 8
    7. .text:0000000140410118                 call    loc_14041010B
    8. .text:000000014041011D
    9. .text:000000014041011D loc_14041011D:
    10. .text:000000014041011D                 add     rsp, 8
    11. .text:0000000140410121                 call    loc_140410114
    calls.png

    Может у кого есть догадки.
     
  2. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.211
    Адрес:
    подполье
    Очевидно, сделано, чтобы дольше крутилась вирта до снятия крипта.
     
    Research нравится это.
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    TrashGen,

    При запрещённых прерываниях..

    Для задержки сделали бы цикл со счётчиком, тем более эта часть ядра писана на асм.

    Если бы реализовано как макрос, то вызовы были бы последовательны.
     
    Последнее редактирование: 1 май 2025
  4. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Ahimov, А можно код целиком в файле или граф из ida. Что-то мне подсказывает, что между этими call есть еще что-то или они расположены не последовательно.

    Во всяком случае разница вот тут немного не сходится с алгоритмом:
    Код (Text):
    1. text:000000014041010B loc_14041010B:
    2. .text:000000014041010B                 add     rsp, 8
    3. .text:000000014041010F                 call    loc_140410102 ; эта точка явно выше чем метка до этого call
    4. .text:0000000140410114
    5. .text:0000000140410114 loc_140410114:
    6. .text:0000000140410114                 add     rsp, 8
    7. .text:0000000140410118                 call    loc_14041010B
    8. .text:000000014041011D
    9. .text:000000014041011D loc_14041011D:
    10. .text:000000014041011D                 add     rsp, 8
    11. .text:0000000140410121                 call    loc_140410114
    т.е. изначально код выглядел вот так
    Код (ASM):
    1. @1: ; loc_140410102
    2.     add rsp, 8
    3.     ret
    4.  
    5. @2: ; loc_14041010B
    6.     add rsp, 8
    7.     call @1
    8.  
    9. @3: ; loc_140410114
    10.     add rsp, 8
    11.     call @2
    12.  
    13. @4: ; ...
    14. ...
     
    Последнее редактирование: 1 май 2025
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    MaKsIm,

    Код (Text):
    1. .text:000000014040FDB1 loc_14040FDB1:                          ; CODE XREF: KiRaiseAssertion+13E↓p
    2. .text:000000014040FDB1                 add     rsp, 8
    3. .text:000000014040FDB5                 call    loc_14040FEC8
    4. .text:000000014040FDBA
    5. .text:000000014040FDBA loc_14040FDBA:                          ; CODE XREF: KiRaiseAssertion+147↓p
    6. .text:000000014040FDBA                 add     rsp, 8
    7. .text:000000014040FDBE                 call    loc_14040FDB1
    8. .text:000000014040FDC3
    9. .text:000000014040FDC3 loc_14040FDC3:                          ; CODE XREF: KiRaiseAssertion+150↓p
    10. .text:000000014040FDC3                 add     rsp, 8
    11. .text:000000014040FDC7                 call    loc_14040FDBA
    12. .text:000000014040FDCC
    13. .text:000000014040FDCC loc_14040FDCC:                          ; CODE XREF: KiRaiseAssertion+159↓p
    14. .text:000000014040FDCC                 add     rsp, 8
    15. .text:000000014040FDD0                 call    loc_14040FDC3
    16. .text:000000014040FDD5
    17. .text:000000014040FDD5 loc_14040FDD5:                          ; CODE XREF: KiRaiseAssertion+162↓p
    18. .text:000000014040FDD5                 add     rsp, 8
    19. .text:000000014040FDD9                 call    loc_14040FDCC
    20. .text:000000014040FDDE
    21. .text:000000014040FDDE loc_14040FDDE:                          ; CODE XREF: KiRaiseAssertion+16B↓p
    22. .text:000000014040FDDE                 add     rsp, 8
    23. .text:000000014040FDE2                 call    loc_14040FDD5
    24. .text:000000014040FDE7
    25. .text:000000014040FDE7 loc_14040FDE7:                          ; CODE XREF: KiRaiseAssertion+174↓p
    26. .text:000000014040FDE7                 add     rsp, 8
    27. .text:000000014040FDEB                 call    loc_14040FDDE
    28. .text:000000014040FDF0
    29. .text:000000014040FDF0 loc_14040FDF0:                          ; CODE XREF: KiRaiseAssertion+17D↓p
    30. .text:000000014040FDF0                 add     rsp, 8
    31. .text:000000014040FDF4                 call    loc_14040FDE7
    32. .text:000000014040FDF9
    33. .text:000000014040FDF9 loc_14040FDF9:                          ; CODE XREF: KiRaiseAssertion+186↓p
    34. .text:000000014040FDF9                 add     rsp, 8
    35. .text:000000014040FDFD                 call    loc_14040FDF0
    36. .text:000000014040FE02
    37. .text:000000014040FE02 loc_14040FE02:                          ; CODE XREF: KiRaiseAssertion+18F↓p
    38. .text:000000014040FE02                 add     rsp, 8
    39. .text:000000014040FE06                 call    loc_14040FDF9
    40. .text:000000014040FE0B
    41. .text:000000014040FE0B loc_14040FE0B:                          ; CODE XREF: KiRaiseAssertion+198↓p
    42. .text:000000014040FE0B                 add     rsp, 8
    43. .text:000000014040FE0F                 call    loc_14040FE02
    44. .text:000000014040FE14
    45. .text:000000014040FE14 loc_14040FE14:                          ; CODE XREF: KiRaiseAssertion+1A1↓p
    46. .text:000000014040FE14                 add     rsp, 8
    47. .text:000000014040FE18                 call    loc_14040FE0B
    48. .text:000000014040FE1D
    49. .text:000000014040FE1D loc_14040FE1D:                          ; CODE XREF: KiRaiseAssertion+1AA↓p
    50. .text:000000014040FE1D                 add     rsp, 8
    51. .text:000000014040FE21                 call    loc_14040FE14
    52. .text:000000014040FE26
    53. .text:000000014040FE26 loc_14040FE26:                          ; CODE XREF: KiRaiseAssertion+1B3↓p
    54. .text:000000014040FE26                 add     rsp, 8
    55. .text:000000014040FE2A                 call    loc_14040FE1D
    56. .text:000000014040FE2F
    57. .text:000000014040FE2F loc_14040FE2F:                          ; CODE XREF: KiRaiseAssertion+1BC↓p
    58. .text:000000014040FE2F                 add     rsp, 8
    59. .text:000000014040FE33                 call    loc_14040FE26
    60. .text:000000014040FE38
    61. .text:000000014040FE38 loc_14040FE38:                          ; CODE XREF: KiRaiseAssertion+1C5↓p
    62. .text:000000014040FE38                 add     rsp, 8
    63. .text:000000014040FE3C                 call    loc_14040FE2F
    64. .text:000000014040FE41
    65. .text:000000014040FE41 loc_14040FE41:                          ; CODE XREF: KiRaiseAssertion+1CE↓p
    66. .text:000000014040FE41                 add     rsp, 8
    67. .text:000000014040FE45                 call    loc_14040FE38
    68. .text:000000014040FE4A
    69. .text:000000014040FE4A loc_14040FE4A:                          ; CODE XREF: KiRaiseAssertion+1D7↓p
    70. .text:000000014040FE4A                 add     rsp, 8
    71. .text:000000014040FE4E                 call    loc_14040FE41
    72. .text:000000014040FE53
    73. .text:000000014040FE53 loc_14040FE53:                          ; CODE XREF: KiRaiseAssertion+1E0↓p
    74. .text:000000014040FE53                 add     rsp, 8
    75. .text:000000014040FE57                 call    loc_14040FE4A
    76. .text:000000014040FE5C
    77. .text:000000014040FE5C loc_14040FE5C:                          ; CODE XREF: KiRaiseAssertion+1E9↓p
    78. .text:000000014040FE5C                 add     rsp, 8
    79. .text:000000014040FE60                 call    loc_14040FE53
    80. .text:000000014040FE65
    81. .text:000000014040FE65 loc_14040FE65:                          ; CODE XREF: KiRaiseAssertion+1F2↓p
    82. .text:000000014040FE65                 add     rsp, 8
    83. .text:000000014040FE69                 call    loc_14040FE5C
    84. .text:000000014040FE6E
    85. .text:000000014040FE6E loc_14040FE6E:                          ; CODE XREF: KiRaiseAssertion+1FB↓p
    86. .text:000000014040FE6E                 add     rsp, 8
    87. .text:000000014040FE72                 call    loc_14040FE65
    88. .text:000000014040FE77
    89. .text:000000014040FE77 loc_14040FE77:                          ; CODE XREF: KiRaiseAssertion+204↓p
    90. .text:000000014040FE77                 add     rsp, 8
    91. .text:000000014040FE7B                 call    loc_14040FE6E
    92. .text:000000014040FE80
    93. .text:000000014040FE80 loc_14040FE80:                          ; CODE XREF: KiRaiseAssertion+20D↓p
    94. .text:000000014040FE80                 add     rsp, 8
    95. .text:000000014040FE84                 call    loc_14040FE77
    96. .text:000000014040FE89
    97. .text:000000014040FE89 loc_14040FE89:                          ; CODE XREF: KiRaiseAssertion+216↓p
    98. .text:000000014040FE89                 add     rsp, 8
    99. .text:000000014040FE8D                 call    loc_14040FE80
    100. .text:000000014040FE92
    101. .text:000000014040FE92 loc_14040FE92:                          ; CODE XREF: KiRaiseAssertion+21F↓p
    102. .text:000000014040FE92                 add     rsp, 8
    103. .text:000000014040FE96                 call    loc_14040FE89
    104. .text:000000014040FE9B
    105. .text:000000014040FE9B loc_14040FE9B:                          ; CODE XREF: KiRaiseAssertion+228↓p
    106. .text:000000014040FE9B                 add     rsp, 8
    107. .text:000000014040FE9F                 call    loc_14040FE92
    108. .text:000000014040FEA4
    109. .text:000000014040FEA4 loc_14040FEA4:                          ; CODE XREF: KiRaiseAssertion+231↓p
    110. .text:000000014040FEA4                 add     rsp, 8
    111. .text:000000014040FEA8                 call    loc_14040FE9B
    112. .text:000000014040FEAD
    113. .text:000000014040FEAD loc_14040FEAD:                          ; CODE XREF: KiRaiseAssertion+23A↓p
    114. .text:000000014040FEAD                 add     rsp, 8
    115. .text:000000014040FEB1                 call    loc_14040FEA4
    116. .text:000000014040FEB6
    117. .text:000000014040FEB6 loc_14040FEB6:                          ; CODE XREF: KiRaiseAssertion+243↓p
    118. .text:000000014040FEB6                 add     rsp, 8
    119. .text:000000014040FEBA                 call    loc_14040FEAD
    120. .text:000000014040FEBF
    121. .text:000000014040FEBF loc_14040FEBF:                          ; CODE XREF: KiRaiseAssertion+12C↑p
    122. .text:000000014040FEBF                 add     rsp, 8
    123. .text:000000014040FEC3                 call    loc_14040FEB6
    124. .text:000000014040FEC8
    125. .text:000000014040FEC8 loc_14040FEC8:                          ; CODE XREF: KiRaiseAssertion+135↑p
    126. .text:000000014040FEC8                 add     rsp, 8
    Таких конструкций очень много где, но в этом случае прерывания выключены, тоесть в задержках нет никакого смысла.
     
  6. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Это не все
    calls.png
    --- Сообщение объединено, 1 май 2025 ---
    Может дело не в задержках. Допустим надо обнулить кеш кода или еще что-то связанное с аппаратными особенностями процессоров.
     
  7. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    Начало это вход в прерывание, что там происходит мы не поймём, так как не известны структуры.

    Код (Text):
    1. .text:000000014040FC80 KiRaiseAssertion proc near              ; CODE XREF: KiRaiseAssertionShadow+69↓j
    2. .text:000000014040FC80                                         ; KiRaiseAssertionShadow+71↓j
    3. .text:000000014040FC80                                         ; DATA XREF: ...
    4. .text:000000014040FC80
    5. .text:000000014040FC80 var_E8          = byte ptr  0
    6. .text:000000014040FC80 var_s4          = dword ptr  4
    7. .text:000000014040FC80 arg_0           = word ptr  8
    8. .text:000000014040FC80
    9. .text:000000014040FC80                 sub     qword ptr [rsp+var_E8], 2
    10. .text:000000014040FC85                 cmp     [rsp+arg_0], 23h ; '#'
    11. .text:000000014040FC8B                 jnz     short loc_14040FC92
    12. .text:000000014040FC8D                 and     [rsp+var_s4], 0
    13. .text:000000014040FC92
    14. .text:000000014040FC92 loc_14040FC92:                          ; CODE XREF: KiRaiseAssertion+B↑j
    15. .text:000000014040FC92                 sub     rsp, 8
    16. .text:000000014040FC96                 push    rbp
    17. .text:000000014040FC97                 sub     rsp, 158h
    18. .text:000000014040FC9E                 lea     rbp, [rsp+80h]
    19. .text:000000014040FCA6                 mov     byte ptr [rbp-55h], 1
    20. .text:000000014040FCAA                 mov     [rbp-50h], rax
    21. .text:000000014040FCAE                 mov     [rbp-48h], rcx
    22. .text:000000014040FCB2                 mov     [rbp-40h], rdx
    23. .text:000000014040FCB6                 mov     [rbp-38h], r8
    24. .text:000000014040FCBA                 mov     [rbp-30h], r9
    25. .text:000000014040FCBE                 mov     [rbp-28h], r10
    26. .text:000000014040FCC2                 mov     [rbp-20h], r11
    27. .text:000000014040FCC6                 test    byte ptr [rbp+0F0h], 1
    28. .text:000000014040FCCD                 jnz     short loc_14040FCFC
    29. .text:000000014040FCCF                 lfence
    30. .text:000000014040FCD2                 test    byte ptr gs:278h, 1
    31. .text:000000014040FCDB                 jnz     short loc_14040FCE5
    32. .text:000000014040FCDD                 lfence
    33. .text:000000014040FCE0                 jmp     loc_14040FF3B
    34. .text:000000014040FCE5 ; ---------------------------------------------------------------------------
    35. .text:000000014040FCE5
    36. .text:000000014040FCE5 loc_14040FCE5:                          ; CODE XREF: KiRaiseAssertion+5B↑j
    37. .text:000000014040FCE5                 movzx   eax, byte ptr gs:27Ah
    38. .text:000000014040FCEE                 mov     ecx, 48h ; 'H'
    39. .text:000000014040FCF3                 xor     edx, edx
    40. .text:000000014040FCF5                 wrmsr
    41. .text:000000014040FCF7                 jmp     loc_14040FF3B
    42. .text:000000014040FCFC ; ---------------------------------------------------------------------------
    43. .text:000000014040FCFC
    44. .text:000000014040FCFC loc_14040FCFC:                          ; CODE XREF: KiRaiseAssertion+4D↑j
    45. .text:000000014040FCFC                 test    cs:KiKvaShadow, 1
    46. .text:000000014040FD03                 jnz     short loc_14040FD08
    47. .text:000000014040FD05                 swapgs
    48. .text:000000014040FD08
    49. .text:000000014040FD08 loc_14040FD08:                          ; CODE XREF: KiRaiseAssertion+83↑j
    50. .text:000000014040FD08                 lfence
    51. .text:000000014040FD0B                 mov     r10, gs:188h
    52. .text:000000014040FD14                 mov     rcx, gs:188h
    53. .text:000000014040FD1D                 mov     rcx, [rcx+220h]
    54. .text:000000014040FD24                 mov     rcx, [rcx+9E0h]
    55. .text:000000014040FD2B                 mov     gs:270h, rcx
    56. .text:000000014040FD34                 mov     cl, gs:850h
    57. .text:000000014040FD3C                 mov     gs:851h, cl
    58. .text:000000014040FD44                 mov     cl, gs:278h
    59. .text:000000014040FD4C                 mov     gs:852h, cl
    60. .text:000000014040FD54                 movzx   eax, byte ptr gs:27Bh
    61. .text:000000014040FD5D                 cmp     gs:27Ah, al
    62. .text:000000014040FD65                 jz      short loc_14040FD78
    63. .text:000000014040FD67                 mov     gs:27Ah, al
    64. .text:000000014040FD6F                 mov     ecx, 48h ; 'H'
    65. .text:000000014040FD74                 xor     edx, edx
    66. .text:000000014040FD76                 wrmsr
    67. .text:000000014040FD78
    68. .text:000000014040FD78 loc_14040FD78:                          ; CODE XREF: KiRaiseAssertion+E5↑j
    69. .text:000000014040FD78                 movzx   edx, byte ptr gs:278h
    70. .text:000000014040FD81                 test    edx, 8
    71. .text:000000014040FD87                 jz      short loc_14040FDA0
    72. .text:000000014040FD89                 mov     eax, 1
    73. .text:000000014040FD8E                 xor     edx, edx
    74. .text:000000014040FD90                 mov     ecx, 49h ; 'I'
    75. .text:000000014040FD95                 wrmsr
    76. .text:000000014040FD97                 movzx   edx, byte ptr gs:278h
    77. .text:000000014040FDA0
    78. .text:000000014040FDA0 loc_14040FDA0:                          ; CODE XREF: KiRaiseAssertion+107↑j
    79. .text:000000014040FDA0                 test    edx, 2
    80. .text:000000014040FDA6                 jz      loc_14040FED1
    81. .text:000000014040FDAC                 call    loc_14040FEBF
    82. .text:000000014040FDB1
    83. .text:000000014040FDB1 loc_14040FDB1:                          ; CODE XREF: KiRaiseAssertion+13E↓p
    84. .text:000000014040FDB1                 add     rsp, 8
    85. .text:000000014040FDB5                 call    loc_14040FEC8
     
  8. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Вот лучше просто откройте graphview от ida и сохраните эту процедуру в файле чем такие куски разгребать
    Снимок экрана_20250501_211157.png
     
  9. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    MaKsIm,

    Что и как сохранить ?

    gp.png

    Кстати в отрисованном графе чушь какая то. Тоесть call ..EBF, а стрелка на блок ..DB1. Глюки иды наверно.
     
    Последнее редактирование: 1 май 2025
  10. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Нет. Там каждая метка достижима двумя путями. По возврату из call, на которую ida рисует стрелку и по вызову. Стрелка по вызову в ida для call не отображается.

    Т.к. это код ядра, тогда надо рассматривать все состояния всех аппаратных структур памяти во всех режимах. Что, скажем, будет в стеке и теневом стеке TSS, после прерывания трассировки?
     
  11. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    MaKsIm,

    Это просто последовательность call - del_ret - call - del_ret... тоесть никаких скрытых особенностей нет, что один call - del_ret, что их 30..
     
  12. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Ну вот поэтому то и надо хотя бы целиком прочитать код, а не пытаться догадываться о его сути по паре команд.
     
  13. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    MaKsIm,

    Вот вся процедура.
    --- Сообщение объединено, 1 май 2025 ---
    Если разметить, что бы было наглядно:

    Код (Text):
    1.     call    L1
    2. L0:  
    3. loc_14040FDB1:
    4.     add     rsp, 8
    5.     call    L2
    6. L3:
    7.     add     rsp, 8
    8.     call    L0
    9. L4:
    10. loc_14040FDC3:
    11.     add     rsp, 8
    12.     call    L3
    13. L5:
    14.     add     rsp, 8
    15.     call    L4
    16. L6:
    17.     add     rsp, 8
    18.     call    L5
    19. L7:
    20.     add     rsp, 8
    21.     call    L6
    22. L8:
    23.     add     rsp, 8
    24.     call    L7
    25. L9:
    26.     add     rsp, 8
    27.     call    L8
    28. L10:
    29.     add     rsp, 8
    30.     call    L9
    31. L11:
    32.     add     rsp, 8
    33.     call    L10
    34. L12:
    35.     add     rsp, 8
    36.     call    L11
    37. L13:
    38.     add     rsp, 8
    39.     call    L12
    40. L14:
    41.     add     rsp, 8
    42.     call    L13
    43. L15:
    44.     add     rsp, 8
    45.     call    L14
    46. L16:
    47.     add     rsp, 8
    48.     call    L15
    49. L17:
    50.     add     rsp, 8
    51.     call    L16
    52. L18:
    53.     add     rsp, 8
    54.     call    L17
    55. L19:
    56.     add     rsp, 8
    57.     call    L18
    58. L20:
    59.     add     rsp, 8
    60.     call    L19
    61.     add     rsp, 8
    62.     call    L20
    63.     ...
    64. LX:
    65.     add     rsp, 8
    66.     call    ..
    67. L1:
    68.     add     rsp, 8
    69.     call    LX
    70. L2:
    71.     add     rsp, 8
    72.     ()
    Получается последовательность L1 LX L20 L19 ... L3 L0 L2

    Макрос это, управление снизу вверх идёт линейно.
     

    Вложения:

    • isr.txt
      Размер файла:
      16,2 КБ
      Просмотров:
      76
  14. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Тут если просто попробовать разобраться в том, что происходит, то можно на долго запутаться. У вас команда call имеет в данном случае вот такую реализацию
    Код (Text):
    1. IF near call
    2.   THEN IF near relative call
    3.     THEN
    4.       IF OperandSize = 64
    5.         THEN
    6.           tempDEST := SignExtend(DEST); (* DEST is rel32 *)
    7.           tempRIP := RIP + tempDEST;
    8.           IF stack not large enough for a 8-byte return address # это не очень интересно. стек у нас выравнен
    9.             THEN #SS(0); FI;
    10.           Push(RIP); # вот тут вот сохранение адреса возврата, которые компенсируются add rsp, 8
    11.           IF ShadowStackEnabled(CPL) AND DEST != 0 # а вот это надо бы проверить
    12.             ShadowStackPush8B(RIP); # и тогда в TSS будут адреса возврата очищать этот самый ShadowStack т.к. add rsp, 8 не будет иметь на него действия
    13.           FI;
    14.           RIP := tempRIP; # ну и собственно сам переход на новую инструкцию
    15.         FI;
    16. ...
    Это все из IntelSDM vol2 Chapter 3 (3-3 Instructions A-L) CALL - Call procedure

    Но вот зачем их расположили в обратном порядке следования адресов я пока не понял.
    Возможно это как-то связано с кешем кода.
    --- Сообщение объединено, 1 май 2025 ---
    ADD: При этом я вам не просто так сказал про то, что каждая метка достижима двумя путями. Т.е. процессор имея конвейер команд будет паразитно выполнять call XXX (5 байт); add rsp, 8 (4 байта); call XXY (5 байт). Итого 14 байт, что забило бы конвейер Pentium, но у современного процессора он может быть и длиннее. Вот эти инструкции будут выполнены после выполнения RIP := tempRIP хотя их результат и будет аннулирован. Вот что дадут и эти инструкции тоже. Хотя, не исключаю, что это может быть уходом в сторону и не стоит лезть в эти дебри.

    На эти рассуждения просто подталкивает команда lfence встречающаяся в коде.
     
    Последнее редактирование: 1 май 2025
    Ahimov нравится это.
  15. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    MaKsIm,

    А зачем в прерывании с ядерным стеком защита от rop, тем более что стек такой(dpc) начинается с начала ?

    Какой вообще смысл в последовательности, быстрее будет без неё конечно.
     
  16. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Вот в том то и дело, что надо разбираться. А это может быть не быстро. Надо анализировать не просто алгоритм на уровне команд, а глубже - на уровне микрокода и железа.

    Вот что породит куча паразитных вычислений, из-за которых процессор будет постоянно чистить конвейер от холостых инструкций. Ведь код зачем то же разместили в обратном порядке.
    --- Сообщение объединено, 1 май 2025 ---
    Что по этому поводу ответил GigaChat
    --- Сообщение объединено, 1 май 2025 ---
    И вот еще
    --- Сообщение объединено, 1 май 2025 ---
    В двух словах - он не знает
     
  17. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    Короче я понял зачем это.

    У всех векторов в IDT, сервисного шлюза есть эта серия. И одинаков это код:

    Код (Text):
    1.  
    2. .text:0000000140405581                 mov     eax, 1
    3. .text:0000000140405586                 xor     edx, edx
    4. .text:0000000140405588                 mov     ecx, 49h ; 'I'
    5. .text:000000014040558D                 wrmsr
    6. .text:000000014040558F
    7. .text:000000014040558F loc_14040558F:                          ; CODE XREF: KiIpiInterrupt+4BF↑j
    8. .text:000000014040558F                 btr     word ptr gs:278h, 5
    9. .text:000000014040559A                 jnb     loc_1404056C5
    10. .text:00000001404055A0                 call    loc_1404056B3
    11. .text:00000001404055A5
    12. .text:00000001404055A5 loc_1404055A5:                          ; CODE XREF: KiIpiInterrupt+4F2↓p
    13. .text:00000001404055A5                 add     rsp, 8
    14. .text:00000001404055A9                 call    loc_1404056BC
    15.  
    Speculation Control IBPB (MSR 049h)

    - вот и запись в регистр 1.

    Другой вопрос что даёт серия.
     
    Последнее редактирование: 2 май 2025
    shanya0xff нравится это.
  18. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Вот только у вас тут нету indirect. Indirect это call qword ptr [mem] или call rax. А тут вполне себе явные вызовы. Я просто не видел упоминания, что call rel32 для x86_64, когда rel32 прибавляется к rip это indirect call. Даже по алгоритму инструкции call это явный вызов.
     
  19. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    254
    MaKsIm,

    Это защита от spectre etc, а как эта магия работает это другой вопрос..
     
  20. MaKsIm

    MaKsIm Active Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    199
    Даже если это так, тогда зачем оно в FindWindow? Она же не обрабатывает прерывания. Это обычная функция пользовательского режима.