не совсем понятная конструкция.

Тема в разделе "WASM.RESEARCH", создана пользователем neutronion, 17 сен 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Просматриваю один код, вернее пролог функции и не могу понять одну конструкцию,
    из-за этого похоже ида неправильно указывает переменные в стандартные функции:
    Код (Text):
    1.                    ; int __stdcall InitializeHandler(int OpenErrorStatus, PNDIS_CONFIGURATION_PARAMETER SelectedMediumIndex, int MediumArray, PVOID MediumArraySize, int miniportAdapterContext, NDIS_HANDLE WrapperConfigurationContext)
    2. .text:0001629A                   InitializeHandler proc near             ; DATA XREF: DriverEntry+58o
    3. .text:0001629A
    4. .text:0001629A                   var_140         = byte ptr -140h
    5. .text:0001629A                   var_13C         = dword ptr -13Ch
    6. .text:0001629A                   var_134         = byte ptr -134h
    7. .text:0001629A                   var_C8          = word ptr -0C8h
    8. .text:0001629A                   var_C6          = word ptr -0C6h
    9. .text:0001629A                   var_C4          = dword ptr -0C4h
    10. .text:0001629A                   var_C0          = word ptr -0C0h
    11. .text:0001629A                   var_BE          = word ptr -0BEh
    12. .text:0001629A                   var_BC          = dword ptr -0BCh
    13. .text:0001629A                   var_B8          = word ptr -0B8h
    14. .text:0001629A                   var_B6          = word ptr -0B6h
    15. .text:0001629A                   var_B4          = dword ptr -0B4h
    16. .text:0001629A                   var_B0          = word ptr -0B0h
    17. .text:0001629A                   var_AE          = word ptr -0AEh
    18. .text:0001629A                   var_AC          = dword ptr -0ACh
    19. .text:0001629A                   Keyword         = UNICODE_STRING ptr -0A8h
    20. .text:0001629A                   var_A0          = word ptr -0A0h
    21. .text:0001629A                   var_9E          = word ptr -9Eh
    22. .text:0001629A                   var_9C          = dword ptr -9Ch
    23. .text:0001629A                   var_98          = word ptr -98h
    24. .text:0001629A                   var_96          = word ptr -96h
    25. .text:0001629A                   var_94          = dword ptr -94h
    26. .text:0001629A                   var_90          = word ptr -90h
    27. .text:0001629A                   var_8E          = word ptr -8Eh
    28. .text:0001629A                   var_8C          = dword ptr -8Ch
    29. .text:0001629A                   var_88          = word ptr -88h
    30. .text:0001629A                   var_86          = word ptr -86h
    31. .text:0001629A                   var_84          = dword ptr -84h
    32. .text:0001629A                   var_80          = word ptr -80h
    33. .text:0001629A                   var_7E          = word ptr -7Eh
    34. .text:0001629A                   var_7C          = dword ptr -7Ch
    35. .text:0001629A                   var_78          = word ptr -78h
    36. .text:0001629A                   var_76          = word ptr -76h
    37. .text:0001629A                   var_74          = dword ptr -74h
    38. .text:0001629A                   var_70          = word ptr -70h
    39. .text:0001629A                   var_6E          = word ptr -6Eh
    40. .text:0001629A                   var_6C          = dword ptr -6Ch
    41. .text:0001629A                   var_68          = dword ptr -68h
    42. .text:0001629A                   var_64          = word ptr -64h
    43. .text:0001629A                   var_62          = word ptr -62h
    44. .text:0001629A                   var_60          = dword ptr -60h
    45. .text:0001629A                   String1         = UNICODE_STRING ptr -5Ch
    46. .text:0001629A                   var_54          = word ptr -54h
    47. .text:0001629A                   var_52          = word ptr -52h
    48. .text:0001629A                   var_50          = dword ptr -50h
    49. .text:0001629A                   var_4C          = word ptr -4Ch
    50. .text:0001629A                   var_4A          = word ptr -4Ah
    51. .text:0001629A                   var_48          = dword ptr -48h
    52. .text:0001629A                   var_44          = word ptr -44h
    53. .text:0001629A                   var_42          = word ptr -42h
    54. .text:0001629A                   var_40          = dword ptr -40h
    55. .text:0001629A                   var_3C          = word ptr -3Ch
    56. .text:0001629A                   var_3A          = word ptr -3Ah
    57. .text:0001629A                   var_38          = dword ptr -38h
    58. .text:0001629A                   var_34          = word ptr -34h
    59. .text:0001629A                   var_32          = word ptr -32h
    60. .text:0001629A                   var_30          = dword ptr -30h
    61. .text:0001629A                   var_2C          = byte ptr -2Ch
    62. .text:0001629A                   NetworkAddressLength= dword ptr -24h
    63. .text:0001629A                   var_20          = word ptr -20h
    64. .text:0001629A                   var_1E          = word ptr -1Eh
    65. .text:0001629A                   var_1C          = dword ptr -1Ch
    66. .text:0001629A                   var_18          = dword ptr -18h
    67. .text:0001629A                   var_14          = dword ptr -14h
    68. .text:0001629A                   var_10          = dword ptr -10h
    69. .text:0001629A                   var_C           = dword ptr -0Ch
    70. .text:0001629A                   NetworkAddress  = dword ptr -8
    71. .text:0001629A                   ConfigurationHandle= dword ptr -4
    72. .text:0001629A                   OpenErrorStatus = dword ptr  8
    73. .text:0001629A                   SelectedMediumIndex= dword ptr  0Ch
    74. .text:0001629A                   MediumArray     = dword ptr  10h
    75. .text:0001629A                   MediumArraySize = dword ptr  14h
    76. .text:0001629A                   miniportAdapterContext= dword ptr  18h
    77. .text:0001629A                   WrapperConfigurationContext= dword ptr  1Ch
    78. .text:0001629A
    79. .text:0001629A 55                                push    ebp
    80. .text:0001629B 8D 6C 24 A0                       lea     ebp, [esp-60h]
    81. .text:0001629F 81 EC 40 01 00 00                 sub     esp, 140h
    вот это место непонятно:
    Код (Text):
    1. .text:0001629B 8D 6C 24 A0                       lea     ebp, [esp-60h]
    почему не
    mov ebp,esp как обычно?
     
  2. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    чтоб потом от ebp не отнимать 60h. а здесь только одна инструкция
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    к ebp потом просто прибавляется
    add ebp, 60h
     
  4. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    кажется понятно, почему ида неправильно считает в этом случае смещения, похоже на то, что не учитываются, что есть в стеке еще точка возврата. Что делать? Ручняком долго править.
     
  5. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    в общем пришел к выводу, если есть конструкция:
    Код (Text):
    1.  
    2. lea   eax, [ebp + 60h + someVar]
    а нужно
    Код (Text):
    1. lea   eax,[ebp + 5Ch + someVar]
    К сожалению таких мест слишком много в этой функции, хотелось бы не делать это вручную.
    Как быть?
     
  6. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    въехал как сделать, нужно просто создать новую переменную на стеке, теперь смещения будут
    указывать на правильные переменные. Т.е. наоборот убрать переменную на стеке s :)