реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Библиотеки в IAR, или сокрытие реализации функций
chernenko
сообщение Dec 4 2006, 10:11
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?
Go to the top of the page
 
+Quote Post
Lem
сообщение Dec 4 2006, 10:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 20-03-05
Пользователь №: 3 533



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


Project Options/General/Output:(Executable/Library)
Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно.
(на выходе должен получаться бинарный модуль)
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 4 2006, 20:29
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Цитата(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. Как это обойти?

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

Сообщение отредактировал chernenko - Dec 4 2006, 20:30
Go to the top of the page
 
+Quote Post
_Bill
сообщение Dec 6 2006, 14:35
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(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

Обратите внимание, что и порты и отдельные разряды в модуле определены как внешние. Конкретные их значения могут менятся от программы к программе. Для этого их в нужно просто определить в конкретной программе сообответсвующим образом и, опять же, на ассемблере.
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 6 2006, 15:27
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 6 2006, 15:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(chernenko @ Dec 6 2006, 15:27) *
Я с вами согласен. И как писал ранее уже получил результат. А нужен он, чтобы не давать содержимое функции заказчику.


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Dec 6 2006, 15:58
Сообщение #7


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(Oldring @ Dec 6 2006, 16:45) *
Цитата(chernenko @ Dec 6 2006, 15:27) *

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


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

А простенький код зачем скрывать, если он простой. biggrin.gif
Простыми методами, я думаю у вас не получиться ничего сделать. Библиотека - это найболее распространенный и в 99% случаев применяемый метод
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 6 2006, 16:17
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Цитата(Oldring @ Dec 6 2006, 15:45) *
Цитата(chernenko @ Dec 6 2006, 15:27) *

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


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


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

Давайте проведем эксперимент? Вот простая библиотека... Вариант черновой не без ошибок но работает Прикрепленный файл  test.txt ( 93.35 килобайт ) Кол-во скачиваний: 292
её расширение изменил на .txt что бы закачать. Изначально оно было .r90 попробуйте мне показать её содержимое... Просто интересно насколько это просто.

Сообщение отредактировал chernenko - Dec 6 2006, 16:19
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 6 2006, 16:27
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



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

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


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

А вытаскивается любая функция из любой библиотеки тривиально. Даже если нет командно-строчного библиотекаря с соответствующей командой. Пишется тестовая программа, состоящая из последовательности вызовов нужных функций. Компилируется с этой библиотекой. Потом программа открывается в симуляторе и проходится по шагам.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 6 2006, 16:34
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



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

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

Давайте проведем эксперимент? Вот простая библиотека... Вариант черновой не без ошибок но работает Прикрепленный файл  test.txt ( 93.35 килобайт ) Кол-во скачиваний: 292
её расширение изменил на .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();
}
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 6 2006, 16:41
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(chernenko @ Dec 6 2006, 15:34) *
Я прекрасно понимаю что для удобства! smile.gif Просто другого выхода нет biggrin.gif по-крайней мере известного для меня...
На самом деле если ваши функции умещаются в 2К вместе с загрузчиком - прошивальщиком, то вполне можно воспользоваться для них областью загрузчика в флеши АВРа. При одной из комбинаций фузов эта область заблокирована для чтения из остальной флеши. Отдаете заказчику прошитый кристалл, он дописывает свою часть в application - секцию. Выпускаем устройство таким методом - все функции управления железом скрыты, заказчик имеет доступ к ним через API.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 6 2006, 17:01
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(chernenko @ Dec 6 2006, 16:34) *
Работа с библиотекой:


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
chernenko
сообщение Dec 6 2006, 18:28
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



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

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


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


Это предполагалось, но это не критично. Это "убивает двух зайцев", номинально выполнятется требование о передачи исходных кодов. И при этом получает симбиоз программы на IAR (которой у заказчика нет) и ассемблера (в котором разбираться он не захочет).... Так что цель практически полностью достигнута.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Dec 6 2006, 20:19
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



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


IMHO не выполняется. Библиотека - это уже не исходные коды.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 09:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016