Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Библиотеки в IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
chernenko
Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?
Lem
Цитата(chernenko @ Dec 4 2006, 10:11) *
Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)
chernenko
Цитата(Lem @ Dec 4 2006, 10:32) *
Цитата(chernenko @ Dec 4 2006, 10:11) *

Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)



Работает и debuger при этом видет функции. Но функции скажем так не прозрачны. Одна проблема. Если при создании бибилотеки презаписать расширение .r90 на .lib то при подключении этой библиотеки в проект, последний ищет библиотеку только .r90 не замечая .lib. Это не принципиально, но для эстетизма хотелось бы иметь библиотеку с расширением .lib. Как это обойти?

А главное стоит ли этот труд каких-либо затрат или все это пустая работа и содержимое библиотеки можно будет легко просмотреть (насколько я понимаю файл библиотеки получается не бинарный)?
_Bill
Цитата(chernenko @ Dec 4 2006, 20:29) *
Цитата(Lem @ Dec 4 2006, 10:32) *

Цитата(chernenko @ Dec 4 2006, 10:11) *

Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)



Работает и debuger при этом видет функции. Но функции скажем так не прозрачны. Одна проблема. Если при создании бибилотеки презаписать расширение .r90 на .lib то при подключении этой библиотеки в проект, последний ищет библиотеку только .r90 не замечая .lib. Это не принципиально, но для эстетизма хотелось бы иметь библиотеку с расширением .lib. Как это обойти?

А главное стоит ли этот труд каких-либо затрат или все это пустая работа и содержимое библиотеки можно будет легко просмотреть (насколько я понимаю файл библиотеки получается не бинарный)?

Ну это же все просто делается. Странслируйте все необходимые модули и создайте из них библиотеку. Эту библиотеку можно подлючать к вашим проектам. Весь вопрос в том, насколько часто будут используемы модули из этой библиотеки. Проблема чаще всего заключается в том, что, как правило, добрая часть программы очень тесно привязана к "железу". Поэтому сделать такие программные модули универсальными весьма проблематично. По крайней мере, на Си. На ассемблере с этим проблем меньше, ассеблер такие вещи делать позволяет. Ниже мой пример подобного универсального модуля программного вывода по последовательному каналу.
Код
    module    SerialOut
;
;    File:    sout.s90
;
;    08-Sep-05 BK    Initial edit
;    28-Sep-05 BK    Last  update
;
$fmacros.inc
;
; External references
;
;    extern    N$BITS            ; The number of bits to be transmitted
N$BITS    =    16                ;
    extern    SDAT$PORT, SDAT$BIT, SDAT$DDR; The data output port
    extern    SCLK$PORT, SCLK$BIT, SCLK$DDR; Clock control port

    rseg    CODE    ; Code segment
;
; ** SerialOut    -- the function outputs N$BITS of data serially through
;        the SDAT$BIT of the MCU port SDAT$PORT. The output starts
;        from the MSB of data.
; ASM usage:
;    r16 - low byte of data;
;    r17 - high byte of data;
;    r18 - the number of bits (N$BITS) for output.
; C usage:
;    void SerialOut(unsigned data, char nbits);

;
; ** SerialOutW    -- the same as the function above, but N$BITS is 16.
;
; ASM usage:
;    r16 - low byte of data;
;    r17 - high byte of data;
; C usage:
;    void SerialOutW(unsigned data);
;
    ENTRY$    SerialOutW
    ldi    r18, N$BITS    ; Set bit counter
    ENTRY$    SerialOut
?0:    sbrs    r17, 7        ; Form a data bit
    cbi    SDAT$PORT, SDAT$BIT    ;
    sbrc    r17, 7            ;
    sbi    SDAT$PORT, SDAT$BIT    ;
    sbi    SCLK$PORT, SCLK$BIT; Form a clock pulse
    lsl    r16            ; (Shift word of data left)
    rol    r17            ;;
    cbi    SCLK$PORT, SCLK$BIT    ;
    dec    r18        ; Bump counter
    brne    ?0        ; Loop if not done yet

    ret
;
; ** InitSerial    -- the function initiates serial port.
;
; C usage:
;    void InitSerial(void);
;
    ENTRY$    InitSerial
    sbi    SCLK$DDR, SCLK$BIT; Set serial port as output
    sbi    SDAT$DDR, SDAT$BIT    ;
    cbi    SCLK$PORT, SCLK$BIT; Set initial levels on clock
    cbi    SDAT$PORT, SDAT$BIT; and data bits
    ret

    end

Обратите внимание, что и порты и отдельные разряды в модуле определены как внешние. Конкретные их значения могут менятся от программы к программе. Для этого их в нужно просто определить в конкретной программе сообответсвующим образом и, опять же, на ассемблере.
chernenko
Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.
Oldring
Цитата(chernenko @ Dec 6 2006, 15:27) *
Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.


Дизассемблируется это все элементарно. Так что такая защита может сработать только в двух случаях: если код огромен и концептуально непонятен, или если заказчик не знает ассемблера.
jorikdima
Цитата(Oldring @ Dec 6 2006, 16:45) *
Цитата(chernenko @ Dec 6 2006, 15:27) *

Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.


Дизассемблируется это все элементарно. Так что такая защита может сработать только в двух случаях: если код огромен и концептуально непонятен, или если заказчик не знает ассемблера.

А простенький код зачем скрывать, если он простой. biggrin.gif
Простыми методами, я думаю у вас не получиться ничего сделать. Библиотека - это найболее распространенный и в 99% случаев применяемый метод
chernenko
Цитата(Oldring @ Dec 6 2006, 15:45) *
Цитата(chernenko @ Dec 6 2006, 15:27) *

Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.


Дизассемблируется это все элементарно. Так что такая защита может сработать только в двух случаях: если код огромен и концептуально непонятен, или если заказчик не знает ассемблера.


Но другого пути как я понимаю нет. Так что пусть делает так. Сейчас код прост, но в будущем будет гораздо сложнее вариант. Да и это может его сподвигнуть на то чтобы сопровождение кода делал его автор на доп. условиях.

Давайте проведем эксперимент? Вот простая библиотека... Вариант черновой не без ошибок но работает Нажмите для просмотра прикрепленного файла её расширение изменил на .txt что бы закачать. Изначально оно было .r90 попробуйте мне показать её содержимое... Просто интересно насколько это просто.
Oldring
Какой размер бинарного кода этой библиотеки? Подозреваю, что все, что обычно интересно - константы, протоколы и т. д., вытащить будет тривиально. Библиотеки применяются прежде всего не для сокрытия кода, а для удобства. Если размер исполняемого кода в них до нескольких сотен килобайт, конечно.

Цитата(chernenko @ Dec 6 2006, 16:17) *
Давайте проведем эксперимент? Вот простая библиотека... Вариант черновой не без ошибок но работает Нажмите для просмотра прикрепленного файла её расширение изменил на .txt что бы закачать. Изначально оно было .r90 попробуйте мне показать её содержимое... Просто интересно насколько это просто.


Вы забыли предоставить еще и описание интерфейса этой библиотеки. biggrin.gif
Или это тоже тщательно скрываемая от заказчика информация? laugh.gif

А вытаскивается любая функция из любой библиотеки тривиально. Даже если нет командно-строчного библиотекаря с соответствующей командой. Пишется тестовая программа, состоящая из последовательности вызовов нужных функций. Компилируется с этой библиотекой. Потом программа открывается в симуляторе и проходится по шагам.
chernenko
Цитата(Oldring @ Dec 6 2006, 16:27) *
Какой размер бинарного кода этой библиотеки? Подозреваю, что все, что обычно интересно - константы, протоколы и т. д., вытащить будет тривиально. Библиотеки применяются прежде всего не для сокрытия кода, а для удобства. Если размер исполняемого кода в них до нескольких сотен килобайт, конечно.

Цитата(chernenko @ Dec 6 2006, 16:17) *

Давайте проведем эксперимент? Вот простая библиотека... Вариант черновой не без ошибок но работает Нажмите для просмотра прикрепленного файла её расширение изменил на .txt что бы закачать. Изначально оно было .r90 попробуйте мне показать её содержимое... Просто интересно насколько это просто.


Вы забыли предоставить еще и описание интерфейса этой библиотеки. biggrin.gif
Или это тоже тщательно скрываемая от заказчика информация? laugh.gif


Я прекрасно понимаю что для удобства! smile.gif Просто другого выхода нет biggrin.gif по-крайней мере известного для меня... А я в этом деле всего 1.5 года biggrin.gif До этого не знал AVR и вообще не занимался этим. А IAR в руки только летом взял. Пробелов много так что не будте строги)

Работа с библиотекой:


//---------------------------------------------------------------------------------------------
int main(void)
{
init();
}

//---------------------------------------------------------------------------------------------
#pragma vector = TIMER2_COMP_vect
__interrupt void Intr_TIMER2_COMP(void)
{
GetDataAndTransmit(0x97,0xA7);
}

//---------------------------------------------------------------------------------------------
#pragma vector = USART0_RXC_vect
__interrupt void Intr_UART0_RX(void)
{
ReciveCommandAnalise();
}
Сергей Борщ
Цитата(chernenko @ Dec 6 2006, 15:34) *
Я прекрасно понимаю что для удобства! smile.gif Просто другого выхода нет biggrin.gif по-крайней мере известного для меня...
На самом деле если ваши функции умещаются в 2К вместе с загрузчиком - прошивальщиком, то вполне можно воспользоваться для них областью загрузчика в флеши АВРа. При одной из комбинаций фузов эта область заблокирована для чтения из остальной флеши. Отдаете заказчику прошитый кристалл, он дописывает свою часть в application - секцию. Выпускаем устройство таким методом - все функции управления железом скрыты, заказчик имеет доступ к ним через API.
Oldring
Цитата(chernenko @ Dec 6 2006, 16:34) *
Работа с библиотекой:


ОК, а теперь, пожалуйста, сами скомпилируйте этот код и запустите под симулятором. Все и увидите. Конечно, на ассемблере biggrin.gif
chernenko
Цитата(Oldring @ Dec 6 2006, 17:01) *
Цитата(chernenko @ Dec 6 2006, 16:34) *

Работа с библиотекой:


ОК, а теперь, пожалуйста, сами скомпилируйте этот код и запустите под симулятором. Все и увидите. Конечно, на ассемблере biggrin.gif


Это предполагалось, но это не критично. Это "убивает двух зайцев", номинально выполнятется требование о передачи исходных кодов. И при этом получает симбиоз программы на IAR (которой у заказчика нет) и ассемблера (в котором разбираться он не захочет).... Так что цель практически полностью достигнута.
Oldring
Цитата(chernenko @ Dec 6 2006, 18:28) *
Это предполагалось, но это не критично. Это "убивает двух зайцев", номинально выполнятется требование о передачи исходных кодов. И при этом получает симбиоз программы на IAR (которой у заказчика нет) и ассемблера (в котором разбираться он не захочет).... Так что цель практически полностью достигнута.


IMHO не выполняется. Библиотека - это уже не исходные коды.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.