Вопрос по IDA PRO

Тема в разделе "WASM.HEAP", создана пользователем yashechka, 5 фев 2017.

  1. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    По адресу X начинается массив строк
    aRaz db 'Raz',0
    aDva db 'Dva',0
    aTri db 'Tri',0
    В ESI помещается эта база X - начало.
    Потом происходит обращение к строчками относительно X
    mov esi, Xh
    lea edx, [esi+10]
    push edx
    lea edx, [esi+10]
    push edx
    lea edx, [esi+10]
    push edx

    lea edx, [esi+10]
    push edx
    lea edx, [esi+10]
    push edx
    lea edx,[esi+20]
    push edx
    call

    Как сделать так, чтобы вместо 10, 20 и т.д. вместо смещений показывались переменный aDva, aTri и т.д. Естественно там другие длинные строки. Первую ида определяется и вместо цифры может подставить буквы mov esi, aRaz
     
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    Можно добавить структуру.
     
  3. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Очень много текста. По другому никак? Я вначале так делал но бросил.
     
  4. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    В X хранится адрес указателей на эти строки или X это непосредственно aRaz?
     
  5. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    X - это адрес, база, относительно неё все выщитывается. Этот адрес X всегда хранится в esi. А к строчкам идет обращение [X+1000], [X+1203]
     
  6. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Буду сюда про иду писать. Хехе. Другой вопрос.
    Правильно ли справляется ХексРэйс?

    MOV EAX,EBX
    ADD EAX,-5C
    SUB EAX,2
    JB _METKA_

    if ( (unsigned int)(myVAR - 0x5c) < 2 )
     
  7. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    По приведенному куску - да. CMP по сути тот же SUB только не изменяет операнды.
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Но операнд ведь здесь изменен. Если из eax дальше есть чтения, то псевдокод некорректен.
     
  9. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    Так я и написал:
    Возможно там дальше идет какой-нибудь код с использованием выше вычисленного значения, который компилятор оптимизировал.
     
  10. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Да. Вот меня тоже всё это смущает. Олли показывает коментарий, что в коде есть свитч-кейс, ХексРейс заменяет JE на равно(=), я согласен с этим. А вот почему jb заменяет на минус два, если sub изменяет EAX на два.
     
  11. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    В общем вот код такой

    mov eax, ebx ; EAX = nIndex
    add eax, -5Ch ; nIndex = nIndex - 5C
    sub eax, 2 ; nIndex = -5E
    jb short loc_1 ; <
    jz short loc_2 ; JE

    Плагин говорит, что это равнозначно

    if ( (unsigned int)(nIndex - 0x5C) < 2 )
    {
    //something;
    }
    else
    {
    if ( nIndex == 0x5E )
    {
    // something
    }

    Если с равно я согласен, то вот JB и < 2 меня смущает. Что-то в голове не укладывается. :/
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    yashechka

    Правильно декомпилит, хотя и без оптимизации. Что именно не понятно ?
    sub r,2/jb это и есть <2:

    IA первый том.
     
  13. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    То что sub изменяется EAX)
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    yashechka

    > То что sub изменяется EAX)

    SUB это операция соответствующая инструкции одноимённой. Она отнимает 2 от регистра Eax и устанавливает соотвественно результату операции флаги. В вашем случае CF, так как заём происходит. Jb это абстракция - это мнемоника, а не реальный код команды. Наверно было бы понятнее для Jc, но эти две мнемоники соотвествуют одной и той же инструкции(кодировке её): Jb = Jc = Jnae.
     
  15. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    861
    Еще раз напишу что SUB и CMP - одно и тоже, отличие только в том что SUB изменяет операнд, а CMP нет.
     
  16. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Спасибо, да, я сам себя запутал!!!
     
  17. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Ида ошибочно добавляет сноску var_4c = dword ptr -4ch
    Этой переменной нет, я избавляюсь от неё через Undefine, но в Хексе она продолжает висеть как int v1 // sp+... bp- ... Как пересинхронизировать Хекс? Ведь в Иде её уже нет, а тут она продолжает оставаться.
     
  18. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Облазил вчера все пункты, ничего не нахожу, как избавиться от этого.
     
  19. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Проглядел. Edit[math]\to[/math]Other[math]\to[/math]Reset.
     
  20. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.087
    х86 ещё актуален для десктопов? я как-то игрался с вариацией qsort на х86 Асм коде, но практика показала, что прироста скорости с чистым х86 нет [math]\to[/math] пришлось извращаться с векторными регистрами и вот тогда дело продвинулось :)