Стек функции

Тема в разделе "WASM.RESEARCH", создана пользователем _jungle_, 18 ноя 2005.

  1. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    кусок ida:
    Код (Text):
    1.  
    2. seg000:0B85 var_7538        = word ptr -7538h
    3. seg000:0B85 var_4E28        = word ptr -4E28h
    4. seg000:0B85 var_2718        = word ptr -2718h
    5. seg000:0B85 var_6           = word ptr -6
    6. seg000:0B85 var_4           = word ptr -4
    7. seg000:0B85 var_2           = word ptr -2
    8. seg000:0B85 arg_3C72        = word ptr  3C76h
    9. seg000:0B85 arg_3C74        = word ptr  3C78h
    10. seg000:0B85 arg_3CA0        = dword ptr  3CA4h
    11.  


    это стэк некоторой функции.

    Раньше ни разу не встречал таких параметром.var_XX это я так понимаю - локальные переменные функции(ну здесь три слова и 3 массива похоже).Это вроде ясно.А вот arg_XX.Раньше видел только arg_0, arg_4 и типа того.Что значат эти аргументы?что за функция такая? причем по контексту из ida не видно вообще, чтобы этой функции передавались параметры.Что это может быть?



    Эдит:забыл указать.изначально функция паскалевская.
     
  2. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    ebp используется как база какой-нить структуры в памяти - вот и все. Убери у функи атрибут bp-based frame - глядишь - понятнее станет.
     
  3. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    не понял.bp указывает на верхушку стека.

    seg000:0B85 push bp

    seg000:0B86 mov bp, sp

    что значит база структуры в памяти?поясни плз.

    а когда убираю атрибут bp-based frame только пропадает надписть комментарий ; Attributes: bp-based frame :dntknw:
     
  4. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Возможно неправильно определился конец функции. Попробуй переопределить (U, C и P на её начале).
     
  5. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    что такое "(U, C и P на её начале)"?



    да, кстатьи, команда из этой функции

    seg000:0BA9 mov [bp+arg_3C74], ax

    в софтайсе отображается

    mov [bp+3c74],ax... так что видимо с адресами все ок.

    хотя когда пишу d ss:bp+3c74 (в айсе) говорится invalid adress
     
  6. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    приложу на всякий случай листинг может кто вдруг посмотрит.

    [​IMG] 1444454025__listing.txt
     
  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Функции передается адрес какой-то структуры, а в коде обращение идет к членам это структуры со смещениями 3C76h, 3C78h и 3CA4h. Ну а ИДА распознала их как три разных параметра функции.





    Приглядись к своей клавиатуре. Теоретически там должны быть такие клавиши. :)
     
  8. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    Да, и правда есть такие клавиши.

    но вопрос скорее заключался в том, что значит "попробуй переопределить (буквы на клавиатуре)"? что преопределять-то?Имена?

    По делу.Структура какого-то бешенного размера получается.килобайт 15.Ну ладно.А из каких соображений можно определить, что это структура и еще вопрос, как адрес структуры передается?





    кусок из места с вызовом:

    ...
    Код (Text):
    1.  
    2. seg000:0F27 MainLoop_STEPS_:                        ; CODE XREF: 00000FADj
    3. seg000:0F27                 inc     S4et4ik?
    4. seg000:0F2B                 call    SubA            ; tut pe4ataet QQ
    5. seg000:0F2E                 call    SubB            ; calc num cla v stepe
    6.  


    ....

    функция suba ничего не возвращает
     
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348




    Это значит:

    U - сделать код по месту курсора неопределенным

    C - Неопределенные данные -> Код

    P - Начало процедуры



    Т.е. после этого ИДА заново проанализирует код функции.
     
  10. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348


    А побольше кода дать жалко? :)

    Где в стек параметры функции записываются?
     
  11. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    делал ucp - то же самое получилось :dntknw:

    больше кода в прикрепленном файле.большим количеством восклицательных знаков выделил нужные места.



    [​IMG] 115364169__listing1.txt
     
  12. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    ну для полноты картины вот и сам экзе.

    Вызов искомой функции по адресу seg000:0F2E



    [​IMG] 2093177227__CLN.EXE



    Именно что инересно еще это то, что не видно вообще, где с стэк записываются параметры.
     
  13. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Глюк иды из-за знакового переполнения. Правильное начало выглядит так:
    Код (Text):
    1.  
    2. sub_B85 proc near
    3.  
    4. var_C388= word ptr -0C388h
    5. var_C359= byte ptr -0C359h
    6. var_7538= word ptr -7538h
    7. var_4E28= word ptr -4E28h
    8. var_2718= word ptr -2718h
    9. var_6= word ptr -6
    10. var_4= word ptr -4
    11. var_2= word ptr -2
    12.  
    13.     push bp
    14.     mov bp, sp
    15.     mov ax, 0C38Ah
    16.     call __StackCheck(Word)
    17.     sub sp, 0C38Ah
    18.     xor ax, ax
    19.     mov [bp+var_6], ax
    20.  
    21. loc_B99:
    22.     mov [bp+var_C359], 0
    23.     push bp
    24.     call sub_63E
    25.     push bp
    26.     call sub_73C
    27.     mov ax, [bp+var_2]
    28.     mov [bp+var_C388], ax
    29.     mov ax, 1
    30.     cmp ax, [bp+var_C388]
    31.     jg  short loc_C05
    32.     mov [bp+var_4], ax
    33.     jmp short loc_BBE
    34.  


    Сначала надо прописать правильный размер фрейма (Alt-P, Local variables: 0xC38A), потом определить переменные в стеке (Ctrl-K), а потом прописывать ручками на них ссылки (Alt-F1), ибо автоопределение через K всё равно глючит.

    Если ты легальный пользователь, обращайся к Ильфаку :)
     
  14. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    да, так точно и получается как ты написал.Я в айсе проверил по адресам, что куда записывается.Хотя в самом айсе пишется точно так же как в иде.Спасибо.Только вопрос, как ты посчитал адреса реальных переменных?из каких соображений? через 10000h?и было ведь 3 неверно определенных аргумента, почему осталось только 2 переменные.

    Что такое Ильфак?
     
  15. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
  16. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    ну как знаю, так и спросил :)

    На вопрос последний ответьте плз кто-нить!!!
     
  17. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    ап плз
     
  18. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Минус (Shift+- в гуи) понажимай на параметрах.
     
  19. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    Ок.С этим вроде разобрался.А кто-нить знает, как это теперь скомпилировать на паскале?С такими объемами массивов компилятор ругается - too many variables.
     
  20. _jungle_

    _jungle_ New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    21
    Адрес:
    Russia
    вопрос решен.