2013-09-13 4 views
0

Записывая коды операций на ARM, я сталкиваюсь с ошибкой.Почему этот код операции не работает должным образом на ARM

8054:  e92d1fff  push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip} 

Вышеупомянутый результат разборки objdump; \xe9\x2d\x1f\xff - то же самое с push {r0-r12}.

Но в другой программе, это опкод не работает должным образом нравится:

1e75:  e9    .byte 0xe9<BR> 
1e76:  1f2d   .short 0x1f2d<BR> 
1e78:  Address 0x06001e78 is out of bounds. 

Любые идеи?

+2

Что это за другая программа? –

+5

'1e75: e9' .. Почему ваша инструкция' push' начинается с нечетного адреса? Инструкции ARM должны быть выровнены по слову, а команды Thumb - половину слова выровнены. Кроме того, если вы не столкнулись с процессором ARM с большими номерами, последовательность байтов должна быть «0xff, 0x1f, 0x2d, 0xe9'. – Michael

ответ

0

Дессассемблер помещает адреса и значения опкода для вашего удобства; вы должны лишить их, когда вы хотите, чтобы собрать их обратно:

push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip}

Если это не проблема, вставить текст в точный вы пытаетесь собрать.

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