кусок ida: Код (Text): seg000:0B85 var_7538 = word ptr -7538h seg000:0B85 var_4E28 = word ptr -4E28h seg000:0B85 var_2718 = word ptr -2718h seg000:0B85 var_6 = word ptr -6 seg000:0B85 var_4 = word ptr -4 seg000:0B85 var_2 = word ptr -2 seg000:0B85 arg_3C72 = word ptr 3C76h seg000:0B85 arg_3C74 = word ptr 3C78h seg000:0B85 arg_3CA0 = dword ptr 3CA4h это стэк некоторой функции. Раньше ни разу не встречал таких параметром.var_XX это я так понимаю - локальные переменные функции(ну здесь три слова и 3 массива похоже).Это вроде ясно.А вот arg_XX.Раньше видел только arg_0, arg_4 и типа того.Что значат эти аргументы?что за функция такая? причем по контексту из ida не видно вообще, чтобы этой функции передавались параметры.Что это может быть? Эдит:забыл указать.изначально функция паскалевская.
ebp используется как база какой-нить структуры в памяти - вот и все. Убери у функи атрибут bp-based frame - глядишь - понятнее станет.
не понял.bp указывает на верхушку стека. seg000:0B85 push bp seg000:0B86 mov bp, sp что значит база структуры в памяти?поясни плз. а когда убираю атрибут bp-based frame только пропадает надписть комментарий ; Attributes: bp-based frame
что такое "(U, C и P на её начале)"? да, кстатьи, команда из этой функции seg000:0BA9 mov [bp+arg_3C74], ax в софтайсе отображается mov [bp+3c74],ax... так что видимо с адресами все ок. хотя когда пишу d ss:bp+3c74 (в айсе) говорится invalid adress
Функции передается адрес какой-то структуры, а в коде обращение идет к членам это структуры со смещениями 3C76h, 3C78h и 3CA4h. Ну а ИДА распознала их как три разных параметра функции. Приглядись к своей клавиатуре. Теоретически там должны быть такие клавиши.
Да, и правда есть такие клавиши. но вопрос скорее заключался в том, что значит "попробуй переопределить (буквы на клавиатуре)"? что преопределять-то?Имена? По делу.Структура какого-то бешенного размера получается.килобайт 15.Ну ладно.А из каких соображений можно определить, что это структура и еще вопрос, как адрес структуры передается? кусок из места с вызовом: ... Код (Text): seg000:0F27 MainLoop_STEPS_: ; CODE XREF: 00000FADj seg000:0F27 inc S4et4ik? seg000:0F2B call SubA ; tut pe4ataet QQ seg000:0F2E call SubB ; calc num cla v stepe .... функция suba ничего не возвращает
Это значит: U - сделать код по месту курсора неопределенным C - Неопределенные данные -> Код P - Начало процедуры Т.е. после этого ИДА заново проанализирует код функции.
делал ucp - то же самое получилось больше кода в прикрепленном файле.большим количеством восклицательных знаков выделил нужные места. 115364169__listing1.txt
ну для полноты картины вот и сам экзе. Вызов искомой функции по адресу seg000:0F2E 2093177227__CLN.EXE Именно что инересно еще это то, что не видно вообще, где с стэк записываются параметры.
Глюк иды из-за знакового переполнения. Правильное начало выглядит так: Код (Text): sub_B85 proc near var_C388= word ptr -0C388h var_C359= byte ptr -0C359h var_7538= word ptr -7538h var_4E28= word ptr -4E28h var_2718= word ptr -2718h var_6= word ptr -6 var_4= word ptr -4 var_2= word ptr -2 push bp mov bp, sp mov ax, 0C38Ah call __StackCheck(Word) sub sp, 0C38Ah xor ax, ax mov [bp+var_6], ax loc_B99: mov [bp+var_C359], 0 push bp call sub_63E push bp call sub_73C mov ax, [bp+var_2] mov [bp+var_C388], ax mov ax, 1 cmp ax, [bp+var_C388] jg short loc_C05 mov [bp+var_4], ax jmp short loc_BBE Сначала надо прописать правильный размер фрейма (Alt-P, Local variables: 0xC38A), потом определить переменные в стеке (Ctrl-K), а потом прописывать ручками на них ссылки (Alt-F1), ибо автоопределение через K всё равно глючит. Если ты легальный пользователь, обращайся к Ильфаку
да, так точно и получается как ты написал.Я в айсе проверил по адресам, что куда записывается.Хотя в самом айсе пишется точно так же как в иде.Спасибо.Только вопрос, как ты посчитал адреса реальных переменных?из каких соображений? через 10000h?и было ведь 3 неверно определенных аргумента, почему осталось только 2 переменные. Что такое Ильфак?
Ок.С этим вроде разобрался.А кто-нить знает, как это теперь скомпилировать на паскале?С такими объемами массивов компилятор ругается - too many variables.