|
|
  |
Библиотеки в IAR, или сокрытие реализации функций |
|
|
|
Dec 4 2006, 10:32
|
Участник

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

|
Цитата(chernenko @ Dec 4 2006, 10:11)  Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста. Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR. То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это? Project Options/General/Output:(Executable/Library) Посмотрите, сам не пробовал (не было нужды), но подозреваю, что это вроде того, что вам нужно. (на выходе должен получаться бинарный модуль)
|
|
|
|
|
Dec 4 2006, 20:29
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 6 2006, 14:35
|
Местный
  
Группа: Участник
Сообщений: 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 Обратите внимание, что и порты и отдельные разряды в модуле определены как внешние. Конкретные их значения могут менятся от программы к программе. Для этого их в нужно просто определить в конкретной программе сообответсвующим образом и, опять же, на ассемблере.
|
|
|
|
|
Dec 6 2006, 16:17
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 6 2006, 16:27
|

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

|
Какой размер бинарного кода этой библиотеки? Подозреваю, что все, что обычно интересно - константы, протоколы и т. д., вытащить будет тривиально. Библиотеки применяются прежде всего не для сокрытия кода, а для удобства. Если размер исполняемого кода в них до нескольких сотен килобайт, конечно. Цитата(chernenko @ Dec 6 2006, 16:17)  Давайте проведем эксперимент? Вот простая библиотека... Вариант черновой не без ошибок но работает
test.txt ( 93.35 килобайт )
Кол-во скачиваний: 292 её расширение изменил на .txt что бы закачать. Изначально оно было .r90 попробуйте мне показать её содержимое... Просто интересно насколько это просто. Вы забыли предоставить еще и описание интерфейса этой библиотеки. Или это тоже тщательно скрываемая от заказчика информация?  А вытаскивается любая функция из любой библиотеки тривиально. Даже если нет командно-строчного библиотекаря с соответствующей командой. Пишется тестовая программа, состоящая из последовательности вызовов нужных функций. Компилируется с этой библиотекой. Потом программа открывается в симуляторе и проходится по шагам.
--------------------
Пишите в личку.
|
|
|
|
|
Dec 6 2006, 16:34
|
Частый гость
 
Группа: Свой
Сообщений: 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 попробуйте мне показать её содержимое... Просто интересно насколько это просто. Вы забыли предоставить еще и описание интерфейса этой библиотеки. Или это тоже тщательно скрываемая от заказчика информация?  Я прекрасно понимаю что для удобства!  Просто другого выхода нет  по-крайней мере известного для меня... А я в этом деле всего 1.5 года  До этого не знал 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(); }
|
|
|
|
|
Dec 6 2006, 18:28
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116

|
Цитата(Oldring @ Dec 6 2006, 17:01)  Цитата(chernenko @ Dec 6 2006, 16:34)  Работа с библиотекой:
ОК, а теперь, пожалуйста, сами скомпилируйте этот код и запустите под симулятором. Все и увидите. Конечно, на ассемблере  Это предполагалось, но это не критично. Это "убивает двух зайцев", номинально выполнятется требование о передачи исходных кодов. И при этом получает симбиоз программы на IAR (которой у заказчика нет) и ассемблера (в котором разбираться он не захочет).... Так что цель практически полностью достигнута.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|