Easyelectronics.ru

Электроника для всех
Текущее время: 16 ноя 2018, 12:54

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 23 ] 
Автор Сообщение
 Заголовок сообщения: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 20:39 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
Приветствую Уважаемые!
Есть дизассемблированный код процессора pic18ф4620/2620, пытаюсь собрать исходник обратно с помощью МПЛАБ IDE МPASMWIN, чтобы потихоньку разбираться что к чему и как работает.
Естественно вылазит куча ошибок.
Самая распространенная это Error[126] 32273 : Argument out of range (8423 not between FC00 and 03FF). В коде данных строк стоит переход BRA 720.
Про команду эту почитал, и вроде метка есть L720. Но ругается я так понимаю на диапазон. Как узнать почему ?
Та же ошибка, только тут уже не нравиться RCALL
L1903 RCALL 987
NOP
BRA L1850
BRA L1851
NOP
NOP
BNC L1852.

и еще

Error[126] 27724 : Argument out of range (9FF8 not between 0000 and FFFF) // CALL 0x0F9FF8,FAST
Error[126] 27769 : Argument out of range (D29A not between 0000 and FFFF) // GOTO 0x1ED29A


Понятно что, тут возможно код так дизассемблировался и в идеале он уже не тот, но всеже 80% кода собирается и выглядит один в один с исходником хекса, если все убрать где начинаются это ошибки. Помогите исправить, чтобы программа компилировалась.

https://mega.nz/#!FMZlGLzZ!EtARv8ivssSE ... 1M4MkJKPFA


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 21:03 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1386
Откуда: Китай, Пекин
я уже выкладывал ссылку на прогу там полный боекомплект.
получите полный исходник из скомпилированного бинарника. ARM поддерживает точно. остальное хз


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 21:30 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
Тут не ARM, а пик. И как это поможет мне? Почитаю интересно. Ссылку бы на файловый обменник.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 22:07 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 117
gemoglobin писал(а):
BRA L1850
BRA L1851

Два безусловных (?) перехода подряд в коде? А это не сегмент init данных оно пытается "заассемблировать"? Забейте проблемные куски сравнимым по размеру количеством NOP-ов, оставив в комментариях исходное, потом по ходу распутывания логики в эмуляторе разберётесь и с этой чертовщиной. Может исполнение и не заходит туда никогда. :-D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 22:23 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
Пробовал убирал эти все места, и кстати на эти переходы компилятор даже не ругается. Больше на переход BRA 720 и он постоянно в коде в самом как раз конце.
Понятно что каждый дизассемблер по своему распутывает и 99% лишние операции в коде есть.
Распутывать прядется долго и читать тоже. Может гуру ассемблера есть, кто быстро эти ошибки поймет и как их исправить.

Эмулятору как раз хекс нужен, он есть, а для изменения его нужен исходник.
И понятно когда вообще ничего не собирается, а тут больше 80% кода собирается один в один. Кроме самого низа. Т.е дизассемблер расшифровал так много, а часть причем конечную не смог, может чего-то не хватает для нормальной компиляции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 23:01 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 1186
Скиньте лучше хекс.
PS: "Исходник" вы не получите. Исходник - это то, что было написано программистом изначально, а вам нужна декомпиляция.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 23:05 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
NStorm писал(а):
Скиньте лучше хекс.
PS: "Исходник" вы не получите. Исходник - это то, что было написано программистом изначально, а вам нужна декомпиляция.

Понятно что один в один не будет. Просто с нуля написать не получится, хочется чтобы можно было дописать что-то в уже декомпелированный код и собрать.
Или так тоже не реально ? Если программа писалась на ассемблере.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 13 июн 2018, 23:45 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 1186
Так реально конечно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 03:08 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 117
gemoglobin писал(а):
Пробовал убирал эти все места, и кстати на эти переходы компилятор даже не ругается. Больше на переход BRA 720 и он постоянно в коде в самом как раз конце.

Я о том, что в прошивке есть как исполняемый код, так и данные для инициализации глобальных переменых, к которым код обращается. Дизассемблер просто переводит байты-слова прошивки в мнемоники ассемблера этого чипа. Когда на его пути код - ны выходе осмысленная программа, когда данные - на выходе бред. Вероятно "в конце" как раз и находятся данные. И константы - типа строковых литералов.
gemoglobin писал(а):
Понятно что каждый дизассемблер по своему распутывает и 99% лишние операции в коде есть.

Если бы речь шла про декомпиляцию в C - то можно было говорить о "разных путях", но ассемблер однозначен - сам МК ведь как-то не путается в расшифровке команд, верно? Т.е. от точки входа в программу и по всему дереву вызовов нет неоднозначностей - вопрос лишь в вычислении границ областей данных и оформлении этих данных в ASM файле синтаксически верным образом. Ну и обработчики прерываний, конечно-же, играют свою партию от известных адресов.
gemoglobin писал(а):
Эмулятору как раз хекс нужен

Грузите оригинальный кекс в эмулятор - ставите точку прерывания в "области данных" в конце и ждёте, двигаете к началу прошивки пока не станет "зацеплять" её при исполнении - значит въехали в сегмент кода, проанализировав окрестности на осмысленность команд - можно и вычислить границу сегмента данных. Судя по тому, что ошибки у вас скучковались "в конце" - есть вероятность, что писали изначальную прошивку на каком нибудь С и компилятор все данные собрал в одном сегменте, так что всё просто - оформляем сегмент массивом данных и в процессе изучения/раскручивания алгоритма по мере обращения к данным можно уже давать переменным осмысленные имена и размеры.
gemoglobin писал(а):
И понятно когда вообще ничего не собирается, а тут больше 80% кода собирается один в один. Кроме самого низа.

Так оформите этот "самый низ" как данные - чтобы ассемблер "не давился". :-) Для начала ... И да - перегнав хекс в бин, а потом глянув последний в хекс-вьюере или редакторе - разница между 80%-ами и "самым низом" будет, подозреваю, весма-а-а заметна на глаз. Особенно строчные литералы. :-) Которые кстати тут-же можно и переписать в человеко-читабельном виде.
gemoglobin писал(а):
Т.е дизассемблер расшифровал так много, а часть причем конечную не смог, может чего-то не хватает для нормальной компиляции.

Но ведь простенькому МК ума хватает для исполнения программы - т.е. всё что надо уже есть в прошивке. Просто дизасм тупенький - поленился пробежался по дереву ветвлений алгоритма и очертить границы исполняемого кода, оформив всё не охваченное исполнением как данные. Подозреваю, что вы гораздо ближе к победе, чем вам кажется. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 07:04 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 115
правильно говорят, кекс нужен.
а вообще код заканчивается на ретурне после метки L1543, остальное, где инструкции вперемешку с нопами - данные, к раввину не ходи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 12:51 
Старожил
Аватара пользователя

Зарегистрирован: 27 окт 2014, 10:36
Сообщения: 273
Откуда: Самара
Ida pro уже рекомендовали как декомпилятор?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:02 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1386
Откуда: Китай, Пекин
Цитата:
Ida pro уже

да, более того с плагинами. но топикстартер магнитами пользоваться похоже не умеет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:11 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
cheblin писал(а):
Цитата:
Ida pro уже

да, более того с плагинами. но топикстартер магнитами пользоваться похоже не умеет

Какие магниты расскажите, о чем опять) Мы все рождаемся и не все знаем. Не проще рассказать как и что?

Int_13h писал(а):
правильно говорят, кекс нужен.
а вообще код заканчивается на ретурне после метки L1543, остальное, где инструкции вперемешку с нопами - данные, к раввину не ходи.

Да верно. Код прекрасно собирается, но не работает. Потому как не хватает данных этих видимо.
По IDA внизу инструкции есть и данные тоже, вопрос как их восстановить. Там даже имена есть.
И получается код не на Си написан, а на ассемблере. Как там данные прикрутили. Которые кирилицей написаны. Есть даже такое как подключение к БД.
Как востановить их?
https://mega.nz/#!4BAXWarb!ZQR3gkNl27_0 ... tfsEQO799k
Помогите добить, если там не сложно.


Последний раз редактировалось gemoglobin 14 июн 2018, 15:20, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:18 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 83
Откуда: Украина
gemoglobin
Magnet Links для Utorrent.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:19 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 772
gemoglobin писал(а):
Какие магниты расскажите, о чем опять.

Магнет ссылки для автоматического скачивания торрент файлов :)
Например tparser - поисковик по торрентам c ссылками для примагничивания.

P.S, Кто их поддерживает, например Transmission


Последний раз редактировалось KPG 14 июн 2018, 15:24, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:22 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
KPG писал(а):
gemoglobin писал(а):
Какие магниты расскажите, о чем опять.

Магнет ссылки для автоматического скачивания торрент файлов :)
Например tparser - поисковик по торрентам c ссылками для примагничивания.

Да знаю я что такое торрент :) Вашу ссылку я скачать так и не смог. Мне не удобно честно. Скачивать одно, а что-то выложить проще на файловый обменник.

Давайте вернемся к теме. Как собрать правильные данные. С инструкциями все понятно. Там их и собирать не нужно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:30 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 115
в иде по правой кнопка мыши можно выбрать представление данные или код, таким образом дизасм иды суем в мплаб, корректируем идовские косяки, чтобы начало компилиться, корректируем имена файловых регистров описанные в инклуде на проц ( ида вроде как не все процы знает и косячит), суем в симулятор, изучаем поведение, восстанавливает исходники в удобночитаемом виде. короче развлечений на долгие зимние вечера предостаточно.
на худо конец даже мплаб умеет дизасмить бинарное и довольно таки неплохо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 15:38 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
Int_13h писал(а):
в иде по правой кнопка мыши можно выбрать представление данные или код, таким образом дизасм иды суем в мплаб, корректируем идовские косяки, чтобы начало компилиться, корректируем имена файловых регистров описанные в инклуде на проц ( ида вроде как не все процы знает и косячит), суем в симулятор, изучаем поведение, восстанавливает исходники в удобночитаемом виде. короче развлечений на долгие зимние вечера предостаточно.
на худо конец даже мплаб умеет дизасмить бинарное и довольно таки неплохо :)

Да в том то и дело, что мплаб который прям хвалят чепуху сует, и тот же мплаб также эти данные переводит в херню дизассемблированную. Где ошибок гораздо больше возникает при компиляции.
И может быть так что инструкции не прописаны были поэтому не работает правильно?
И САМИ ДАННЫЕ я так понимаю будут в коде ASM правильно ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 16:23 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 115
в бинарнике не прописывается код или данные,как например в х86, сама прога обращается к части памяти как к данным, так что только руками реверсера можно их представить как данные, директивами


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 17:08 
Заглядывает иногда

Зарегистрирован: 03 июл 2012, 19:16
Сообщения: 115
gemoglobin писал(а):
https://mega.nz/#!4BAXWarb!ZQR3gkNl27_0 ... tfsEQO799k
Помогите добить, если там не сложно.


уже недоступен файлик то


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 17:20 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5132
gemoglobin писал(а):
Приветствую Уважаемые!
Есть дизассемблированный код процессора pic18ф4620/2620, пытаюсь собрать исходник обратно с помощью МПЛАБ IDE



Саму прошивку выкладывай...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 18:05 
Только пришел

Зарегистрирован: 13 янв 2014, 09:46
Сообщения: 13
Int_13h писал(а):
корректируем имена файловых регистров описанные в инклуде на проц ( ида вроде как не все процы знает и косячит)

Так и есть - файл IDA\cfg\pic16.cfg косячный.
Там даже неверно адреса внутренней памяти процессора PIC18F4620 прописаны (0x0000-0x8000 вместо 0x0000-0x10000).
Я для себя cкорректировал, для процессоров PIC18F2420, PIC18F4410, PIC18F4620.


Вложения:
pic16.zip [4.09 Кб]
Скачиваний: 20
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод дизассемблера обратно в исходник
СообщениеДобавлено: 14 июн 2018, 19:32 
Заглядывает иногда

Зарегистрирован: 27 май 2018, 10:09
Сообщения: 36
dosikus_2 писал(а):
gemoglobin писал(а):
Приветствую Уважаемые!
Есть дизассемблированный код процессора pic18ф4620/2620, пытаюсь собрать исходник обратно с помощью МПЛАБ IDE

Саму прошивку выкладывай...

https://mega.nz/#!oNAXkDyL!ZQR3gkNl27_0 ... tfsEQO799k
Повторим. Ты можешь я знаю :) У тебя перевод в нормальный код хорошо получается.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB