+ Reply to Thread
Results 1 to 3 of 3

Thread: Как правильно в IDA оформлять переходы с косвенной адресацией?

  1. #1

    Default Как правильно в IDA оформлять переходы с косвенной адресацией?

    Часто компиляторы вставляют в код комманды перехода с косвенной адресацией. То есть указывается не адрес перехода, а производятся некие вычисления в результате которых изменяется содержимое регистра который определяет адрес перехода. Часто такая адресация используется при реализации в машинном коде оператора switch...case.

    Предположим что есть такая конструкция:

    call switch
    offset_1
    offset_2
    offset_3
    -----------
    code_1

    -----------
    code_2

    Вызов процедуры switch приводит к тому, что анализируются по принципу case 1 2 3 итд значения и выбираются соответствующие им смещения offset из байтов памяти. после операций со значениями этих смещений в регистр указывающий на адрес перехода загружается нужный адрес.
    Ну например передали в процедуру свич case2. Процедура считывает из памяти по адресу где располагается offset_2 два байта обозначающие смещение. В итоге после вычислений получаем в регистре указателе адрес указывающий на code_2.

    При работе IDA на ряде процов дизассемблер не может автоматически определить такие конструкции и соответственно нарисовать в графическом виде схемы переходов. Это в лучшем случае. В обычном же случае он неправильно произведет дизассемблирование. То есть например попытается перевести область данных offset_0 1 2 в код. При ручном разборе мы можем указать руками то что области offset_ это области данных и может вычислить реальные адреса code_1 code_2 итд.


    Но как правильно указать IDA переходы по этим адресам, чтобы на Графическом представлении(дереве) не происходил назрыв схемы на комманде call switch и схема была бы читаемой, как буд-то IDA самостоятельно распознал переходы с косвенной адресацией и отрисовал ветви переходов?

  2. #2
    Darwin's Avatar

    Default Re: Как правильно в IDA оформлять переходы с косвенной адресацией?

    В Иде можно настроить switch вручную:



    Счастлив кто отдал, а не взял. (с) Inception

  3. Пользователь сказал cпасибо:
    OPK (09-02-2018)
  4. #3

    Default Re: Как правильно в IDA оформлять переходы с косвенной адресацией?

    Да, работает. Спасибо большое.

    А как оформить одиночные переходы?

    Например
    x=x++
    jmp x

    ............................
    code_2

    Вычисляем значение ргистра x. Переход jmp происходит по адресу содержащемуся в x. В x содержится адрес с которого начинается код code_2

+ Reply to Thread

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 08:55
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org