|
|
  |
Ассемблер AVR |
|
|
|
Aug 7 2012, 07:07
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(demiurg_spb @ Aug 7 2012, 10:25)  ...не может исполняться у АВР. ля тех кто читает между строк - краткое содержание преддущих топиков: идёт речь об адресах, которые могут храниться как во флэше так и в озу... адреса переходов, а не код. повнимательней что ли бы... Цитата(ILYAUL @ Aug 6 2012, 21:43)  ...в смысл дизasm не даст ниодной метки переходов, как будто программа выполняется подряд , команда за командой.... кстати по поводу данной мысли. _любой_ бинарный код - команда за командой. в данный момент времени мощные дизасэмблеры отлично орентируются в командах проца, команды которого дезасмблируют. и деление на подпрограммы - есть условности именно дизасэмблера, а не бинарного модуля как такогого. т.е. я о чём - после отработки современного дизасэмблера подпрограммы будут(чисто отмеченные дизасэмблером). а вот очерёдность и порядок вызова данных подпрограмм - вот это уже не будет следовать из кода. и где применимо...наверное там, где прошивка передаётся в открытом виде. но в серъёзных проектах - это не серьёзно(открытая прошивка)
Сообщение отредактировал kolobok0 - Aug 7 2012, 07:09
|
|
|
|
|
Aug 7 2012, 08:41
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата идёт речь об адресах, которые могут храниться как во флэше так и в озу... адреса переходов, Не всем так , нет там адресов переходов ни во FLASH ни в SRAM . Вы можете использовать SRAM по прямому назначению . но это никак не повлияет на адресацию. Все адреса переходов вычисляются на стадии компиляции программы , а использование команды ret вообще для любого диза - просто ret / А вот то , что с этой точки можно уйти в любую сторону кода без последствий , я думаю что он тоже не просечёт. Отслеживать стек , я думаю дизы ещё не научились. Собственно , особо нового ничего и нет. Многим известен такой подход Код ldwi Z,METKA push ZL push ZH ---------- MAIN: Какой -то код ----------- ret Какой -то код ----------- METKA: Это всё в области FLASH , и метка существует в явном виде иначе компилятор ее не вычислит. но если Код .dseg METKA: то адрес метки возьмётся по адресу SRAM Если METKA = 0x100 , то программа удёт на адрес 0x100 , если добавить .byte 8 - то на удёт на 0x108, при этом в самой программе меток нет вообще Код 0x107 ldi count,30 0x108 dec count 0x109 add temp,count 0x110 sts METKA, temp ну и т.д. этот код для примера т.е просто набор пришедших в голову команд
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Aug 7 2012, 11:38
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(ILYAUL @ Aug 7 2012, 12:41)  ...Вы можете использовать SRAM по прямому назначению . но это никак не повлияет на адресацию. Все адреса переходов вычисляются на стадии компиляции программы...Отслеживать стек...такой подход ...Это всё в области FLASH , и метка существует в явном виде иначе компилятор ее не вычислит....адрес метки возьмётся по адресу SRAM..Если...то программа удёт на адрес 0x100 , если добавить ...то на удёт на 0x108, при этом в самой программе меток нет вообще... уважаемый, вы мягко говоря либо не так пишите, либо не так думаете... 1) ОЗУ можно использовать как хошь, в том числе и как хранилище адресов переходов. 2) речь шла немного о других командах,а не рэт. С рэт можно делать более экстравагантные ситуации, где дизасм. сто пудово не пройдёт, даже если будет сечь все регистры и память вместе взятые. 3) Ваш подход не совсем понятен(как пример). Потому, что он путает исходники, а не бинарь как способ уйти от дизасма. Для понимания моей фразы прошу объяснить мне Вашу цитату "метка существует в явном виде". Она существует где??? подумайте хорошенько прежде чем ответить. 4) адресс - это некое число. его можно получить как хотите - хоть сдвигом влево, хоть подсчётом в столбик. способ инициализации адреса в исходниках - феолетово как. главное чтоб при просмотре бинарника это не было понятно. рекомендую найти на просторах инета любые исходники вирусов(для x86 должны быть). и загляните в них. вы так многое узнаете-гарантирую!!! существует приёмы, известные ещё со времён доса, которые использовали профи в вирусах. в своё время, для себя выработал постулат - хочешь научиться писать на азме - напиши вирус(не путать с распространением его). ЗЫ Если интересует конкретика в данном вопросе - ставте задачу, находите способы решения известные вам, выкладывайте на форум. я думаю, что это будет интересно всем - научиться приёмам, которые можно заюзать при решении тех или иных проблем.
|
|
|
|
|
Aug 7 2012, 12:42
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
1. Я не храню там адреса переходов , я использую адреса области SRAM как базовые адреса для перехода к подпрограммам 2. О каких других командах шла речь , если я вообще никакие команды до поста с кодом не приводил. 3. В явном виде , это значит что в памяти программ надо обозначить метку к которой я хочу перейти , что бы компилятор смог вычислить PC-XXXX где XXXX - адрес метки. В любом случае дизас ее покажет. Через SRAM метка не нужна. 4. Да это один из способов адресации к коду в программной памяти. А вопрос был поставлен так Цитата Но вот , что это даёт практически и как это можно использовать не придумаю никак? Т.е. где бы такой выкрутас можно применить? Хорошо , напишу вирус
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Aug 7 2012, 13:43
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(ILYAUL @ Aug 7 2012, 16:42)  ...2. О каких других командах шла речь...3. В явном виде , это значит что в памяти программ надо обозначить метку к которой я хочу перейти , что бы компилятор смог вычислить PC-XXXX где XXXX - адрес метки. В любом случае дизас ее покажет. Через SRAM метка не нужна.... 2 - простите это я погорячился. действительно icall & ijmp не вы произнесли. 3 - а теперь давайте подумаем как дизазм находит эту метку  найдя явную команду перехода(условного, безусловного, относительного или явного) дизассэмблер рисует метку "XRU_101:" и в ссылках вносит эту метку типа "rjmp XRU_101" в дизассэмблерном коде. т.е. если явно нигде дизасэмблер не найдёт ссылку на данный код - то и метки не будет. т.е. достаточно не создавать таких ссылок. теперь возвращаемся к исходному коду. нахрена себе делать гимор в виде не существующих меток??? вполне достаточно будет имея некий базовый адрес и оффсет до нужного куска кода, чтоб сложить их и получить нужный адресс. это как один из способов получения адреса. (извращатся можно бесконечно кстати) в AVR оффсет команд выравнен на слово. в 86 архитектуре можно было ещё и с этим играться. ик... ЗЫ и это ещё без затрагивания приимуществ AVRов, самопрограммирования, аппаратуры и прочих плюшек в конкретных камнях... ЗЫ ЗЫ И всё же, ышо раз обращаю ваше внимание на то, что указание метки в исходниках не есть причина нахождения метки в дизассэмблере!!! причина в команде ПЕРЕХОДА по данному адресу. А метки сами по себе прятать - то только исходники путать. Отсюда я и спрашивал - задача у вас какая изначально то??? Цитата(ILYAUL @ Aug 7 2012, 16:42)  ...А вопрос был поставлен так ... на вопрос я уже отвечал. там где нужно динамически вычислять адресс перехода. например в "оверлейных" кусках программы. либо всевозможные таблицы переходов - типа аля switch. "конечный автомат" если хотите.
Сообщение отредактировал kolobok0 - Aug 7 2012, 13:44
|
|
|
|
|
Aug 7 2012, 15:34
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Спасибо , за пояснения. Цитата Отсюда я и спрашивал - задача у вас какая изначально то??? Если по данному обсуждению то никакой . Я писал программу с ветлениями через ret и допустил ошибку с меткой , забыл вписать метку , да и обозвал ее так же как в .dseg и программа "запрыгала" не туда куда я ожидал. Естественно прояснил почему , ну и дальше Вы уже знаете.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|