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