![]() |
eXeL@B —› Вопросы новичков —› Ida, positive sp value has been found - Command ChangeStackPointer failed |
Посл.ответ | Сообщение |
|
Создано: 10 февраля 2014 23:49 · Личное сообщение · #1 Не могу понять как решить ошибку декомпиляции hex-rays, жму F5 на функции, ругается: 487BDD positive sp value has been found Code:
Нашел описания в интернете, что нужно на проблемном адресе нажать alt+k и изменить неправильное значение sp, жму на 487BDD и вижу окно с инфой current SP value: 0x4 DIFFERENCE between old and new SP "поле для ввода нового значения" Но какое бы значения я туда не ввел, ида все время пишет Command "ChangeStackPointer" failed Собственно пробовал 0x0, 0x4, -0x4 ![]() |
|
Создано: 10 февраля 2014 23:54 · Личное сообщение · #2 |
|
Создано: 11 февраля 2014 00:12 · Личное сообщение · #3 Хм, теперь функция выглядит так Code:
На первом адресе нажал clt+k и поставил -0x12, в итоге на 487BDD стало 0 и функция декомпилировалась, я ведь правильно изменил или менять нужно было не с 1 адреса функции? Code:
![]() |
|
Создано: 11 февраля 2014 00:22 · Поправил: reversecode · Личное сообщение · #4 эти значение указатель стека, вот глазками нужно пройтись и проверить где он правильно или не правильно проставлен идой, потому что ида не сможет правильно расставить указатель стека например function_blue(4, 5, function_red(9, 0), 3); код ассемблера может быть push 3 push 0 push 9 call function_red push 5 push 4 call function_blue а теперь представте что вы ида, и попробуйте угадать как правильно дожен стоят указатель стека на функции function_red ? в зависимости от указателя будет разный вывод и в hexrays например если ида распознает стек по умолчанию то рейс сгенерит код function_red(9, 0, 3); function_blue(4, 5,) согласитесь это не то что было в оригинале вот такие случаи и многие другие ида предупреждает и нужно вручную все выставлять вообщем как то так, в двух словах)) а то щас тролли набегут и будут рассказывать по другому ![]() |
|
Создано: 11 февраля 2014 22:52 · Личное сообщение · #5 Благодарю, уже немного понятней. Но вопросы все равно еще есть по этой теме: 1. как ида вообще определяет указатель стека, из каких критерий она исходит? (понимаю, что вы не разработчик иды и это можно спросить у них, но сомневаюсь, что разработчики программы со стоимостью персональной лицензии иды+хекс рейс почти под 100к рублей с радостью мне это расскажут) может быть есть собственные наблюдения? 2. существуют же стандарты вызова, я про них читал не много и давно, на вскидку помню stdcall и в иде замечал cdecl - разве они не должны определять порядок подачи аргументов функциям в стеке? и небольшой оффтоп 1. не знаком с устройством компиляторов - какие книжки/статьи/сайты по их работе имеет смысл почитать? полагаю понимание устройства компиляторов даст более лучшее понимание ассемблерных листингов ![]() |
|
Создано: 11 февраля 2014 23:12 · Личное сообщение · #6 |
|
Создано: 12 февраля 2014 01:04 · Поправил: plutos · Личное сообщение · #7 |
![]() |
eXeL@B —› Вопросы новичков —› Ida, positive sp value has been found - Command ChangeStackPointer failed |