помоему там и так очевидно
cdecl vs stdcall conversion
ida определила что функция cdecl и разметила стек под нее не вытолкнув 4 аргумента в dword (4+4+4+4=16=0x10)
поэтому нужно было ей сказать что на call eax нужно снять 4 аргумента обратно со стека потому что это stdcall
так же видно было до этого когда включили указатели стека
о том что на retn предупреждение что стек не выровнен, на retn должен быть 0
Доброго времени суток!
Столкнулся с новой для себя проблемой разломанного стека функции в процессе ревёрса.
Приложение использует старенький DirectDraw для рисования.
LPVOID lpSurface; расположена по смещению ebp-1Ch, а при сопоставлении со структурой LPDIRECTDRAWSURFACE surfacePtr; начинает указывать на DDPIXELFORMAT ddpfPixelFormat (ebp-8h).
Само собой, это рабочий код, который прекрасно функционирует.
В чём может быть проблема? Как её исправить? Насколько я понимаю, стек ломает вызов CreateSurface, но как подсказать Hex-Rays, что он неправ?
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
Спасибо!
R>Options->General->Stack pointer[x]->OK R>g .text:00403C01 OK R>промахнулся взглядом .text:00403C03 правильный
Нет, правильный как раз 00403C01 (во всяком случае, только он даёт нужный результат
Если можно, объясни эту магию. Что случилось со стеком? Зачем его приходится двигать руками? Как вычислить это неправильное значение? Как найти другие места, где вылезают неверные смещения?
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт
Здравствуйте, reversecode, Вы писали:
R>помоему там и так очевидно R>cdecl vs stdcall conversion R>ida определила что функция cdecl и разметила стек под нее не вытолкнув 4 аргумента в dword (4+4+4+4=16=0x10) R>поэтому нужно было ей сказать что на call eax нужно снять 4 аргумента обратно со стека потому что это stdcall
R>так же видно было до этого когда включили указатели стека R>о том что на retn предупреждение что стек не выровнен, на retn должен быть 0
Понял! Спасибо!
"Хаос всегда побеждает порядок, поскольку лучше организован." (с) Терри Пратчетт