Что делает эта инструкция bsr.l?

Я играюсь с дизассемблером coldfire и узнаю этот кусок кода:

loc_F7E:
    bsr.l loc_F7E+2
    lea 12(sp),sp
    pea (284).w
    clr.l -(sp)
    move.l  a6,d0
    addi.l  #-636,d0
    move.l  d0,-(sp)

loc_F98:
    bsr.l loc_F98+2
    lea $C(sp),sp
    pea (284).w
    clr.l -(sp)
    move.l  a6,d0
    addi.l  #-$398,d0
    move.l  d0,-(sp)

Пытаюсь понять, для чего нужны эти бср.л. Для меня это только сам прыжок.


person Michel Boaventura    schedule 12.11.2014    source источник
comment
Есть ли что-нибудь еще после move.l d0,-(sp) в каждом случае?   -  person Paul R    schedule 13.11.2014
comment
Нет, только это. Это странно, потому что он помещает некоторые значения в стек, как если бы он собирался вызвать подпрограмму, но просто вызывает саму себя.   -  person Michel Boaventura    schedule 13.11.2014
comment
Это исполняемый файл, библиотека, объектный файл или что? Мне просто интересно, является ли адрес назначения bsr просто заполнителем, который фиксируется во время ссылки/загрузки?   -  person Paul R    schedule 13.11.2014
comment
Это файл elf, и этот конкретный код представляет собой часть экспортируемой функции.   -  person Michel Boaventura    schedule 14.11.2014


Ответы (2)


Согласно мануалу, bsr.l *+2 имеет шестнадцатеричный код $61FF $0000 $0000, поэтому, скорее всего, это результат дизассемблирования объектного кода с неразрешенными релокациями, о чем выше упоминал Игорь Скочинский.

person lvd    schedule 14.11.2014

Я думаю, что это может быть результатом оптимизации компилятора для более компактного кода. См. «Короткая оптимизация BRA» в руководстве по компилятору.

Последние версии IDA дизассемблируют такие ветки как skip2 (есть еще skip1) для кода HC08 и HC12. Такой оптимизации в коде ColdFire я еще не встречал.

РЕДАКТИРОВАТЬ: или это может быть просто объектный файл с неразрешенными перемещениями.

person Igor Skochinsky    schedule 13.11.2014
comment
Я разобрал этот же код с помощью REC (backerstreet.com/rec), и он смог скажите мне, что это на самом деле вызовы функций, и покажите мне, какие функции. Так что я думаю, что вы правы, но, к сожалению, IDA не может этого понять! - person Michel Boaventura; 14.11.2014
comment
отправьте отчет об ошибке тогда. - person Igor Skochinsky; 14.11.2014