2012-01-26 1 views
2

Я разборкой прошивки с помощью IDA (mipsb процессора)MIPS разборки: Lui с последующим LBU

Я вижу это много в этом IDA dissasm.

lui  $t9 , 0x802f 

... ничего не делает с $t9 ... и не прыгает ..

lbu  $t9, 0x200+var_24($sp) 

И это не имеет никакого смысла для меня. в первой строке: $t9 становится 0x802F0000 во 2-й строке: $t9 становится любым байт, хранящимся в этом месте в стеке.

Если я прав, то в чем смысл? Является ли это неудачей используемого компилятора или, может быть, неудачей программиста, или я что-то пропустил?

enter image description here

+0

Не имеет смысла и для меня. Может быть, старый сломанный компилятор или какой-то тайный способ сделать NOP ... – m0skit0

+0

Код может быть скомпилирован с '-O0'. Оптимизация обычно устраняет такие глупости. – markgz

ответ

1

Это останется загадкой, как это произошло здесь, но, очевидно, lui $t9 , 0x802F не имеет абсолютно никакой цели в этом коде (и в других частях прошивки, на которую я смотрю, я вижу то же самое .. то же самое нонсенс ... с те же значения lui $t9, 0x802f)

Ответ на hsikcah определенно неверен. (lbu загружает один байт, но он обнуляет первые 3 байта регистра).

Ответ, кажется, является моей первоначальной догадкой. Это либо артефакт компилятора или нонсенс кодера, что не было удален компилятором (также предложило m0skit0 х и markgz 's комментариев)

0

Поручение Lbu не знаком продлен. В результате предположим, что 0x200 + var_24 ($ sp) содержит 0x12 после этих двух команд, значение $ t9 станет ox80200012. Эти пары инструкций являются общими для загрузки 32-битного адреса памяти. В качестве общего примера можно было бы выполнить итерацию через структуру данных в куче.

+0

hmmm ... так что вы говорите, что уже есть в первых трех байтах $ t9, все равно будет там после lbu $ t9 ... в основном действуя как инструкция ADD .., чтобы добавить смещение к base – vmanta

+0

Я добавил картинку. Обратите внимание на '$ t6 = 0x000000EE' и' bne' ниже его, сравнивая '$ t9' и' $ t6' .... что 'bne' будет бесполезным, если то, что вы говорите, верно, не так ли? – vmanta

+0

Я имею в виду сравнение в bne .. всегда будет ложным, если вы правы ... но я думаю, что вы ошибаетесь – vmanta

2

Вы не показали, что происходит до этого. Если есть ветка непосредственно перед lui, код в пункте назначения ветки может использовать загруженное значение t9.

Кроме того, отключите упрощение инструкций в параметрах, специфичных для процессора. Я подозреваю, что хранилище на 800D8328 использует значение t9 для части адреса, а IDA упростит его, заменив полное значение.

 Смежные вопросы

  • Нет связанных вопросов^_^