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

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


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

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



Вобщем задача простая, а как реализовать не знаю... и реализуема ли она вообще. Посоветуйте, пожалуйста.
Нужно срыть каким либо образом часть исходного кода программы, которая написана в IAR.
То есть сделать часть функций в виде какой либо библиотеки, чтобы сами функции были видны, а их реализации срыты и не доступны. Возможно ли это?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
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
chernenko
сообщение Dec 6 2006, 16:17
Сообщение #7


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

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:29
Рейтинг@Mail.ru


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