Время в GuardantCode

Я разрабатываю программу загружаемую в Guardant Code (тот, который НЕ Time) и мне понадобилось в загружаемом коде определять время. Любое время которое как-то можно привязать к реальному. Например - число тиков от момента подачи питания на устройство, по гринвичу, etc... Точной привязки не надо, достаточно уметь определять длительность между выполнением некого кода.

Использовать time() нельзя, не слинкуется, GcaGetTime() возвращает GrdE_NoService.

Есть какие-нибудь идеи, может я что проглядел в API?

Re: Время в GuardantCode

Здравствуйте,

Идеология на самом деле очень простая: если вам нужно _надежно_ определять время внутри ключа, оперировать им и измерять - то вам нужен ключ Guardant Code Time. Он для этого и создан.

Если надежность определения времени несущественна, то вы вполне можете вызывать ту же функцию time() в хостовой программе и передавать результат внутрь GrdCodeRun. Длительность времени между выполнениями некоторого кода легко меряется, накладные расходы легко вычисляются.

Re: Время в GuardantCode

Идеология на самом деле очень простая: если вам нужно _надежно_ определять время внутри ключа, оперировать им и измерять - то вам нужен ключ Guardant Code Time. Он для этого и создан.

Моя цель - измерять интервалы времени внутри ключа, не полагаясь на поддержку извне. Вопрос - как использовать ту же time() внутри ключа (для моих целей разница между time() и clock() несущественна). Я не могу собрать программу, которая использует эти функции:

Если в программе есть вызов time(), во время линковки я получаю сообщение об ошибке:

Linking: .out/test_.elf
d:/dev/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: address 0x40008300 of .out/test_1.elf section .stack is not within region RAM
d:/dev/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(time.o): In function `time':
time.c:(.text+0x1c): undefined reference to `_gettimeofday_r'

Если попытаюсь использовать clock(), тогда на линковке:

Linking: .out/test_.elf
d:/dev/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: address 0x40008300 of .out/test_1.elf section .stack is not within region RAM
d:/dev/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib\libc.a(clock.o): In function `clock':
clock.c:(.text+0x14): undefined reference to `_times_r'

Я плохо знаю runtime библиотеки для ARM|Coretx, подскажите что подключить надо. Мне кажется совершенно невероятным, что существует процессор, который не может вернуть что-нибудь наподобие clock(). Просто по каким-то непонятным причинам этой функции не оказалось в runtime библиотеках для guardant code. Может есть ASM вставка?

Версии инструментов:

  • GuardantSDK -- 6.1

  • WinARM -- 20060606

  • Yagarto -- 2.21 и 2.22


AndreyStepin пишет:

Здравствуйте,

Идеология на самом деле очень простая: если вам нужно _надежно_ определять время внутри ключа, оперировать им и измерять - то вам нужен ключ Guardant Code Time. Он для этого и создан.

Если надежность определения времени несущественна, то вы вполне можете вызывать ту же функцию time() в хостовой программе и передавать результат внутрь GrdCodeRun. Длительность времени между выполнениями некоторого кода легко меряется, накладные расходы легко вычисляются.

Re: Время в GuardantCode

Сходу мы вам помочь не сможем. Описанный вами функционал наверняка существует в микропроцессоре ключа, но мы не ставили цель его экспортировать для клиентов. Более того, микропроцессоры в наших ключах могут меняться (даже внутри одного поколения ключей) и некоторые возможности могут отличаться по реализации.

Наша задача, как поставщика продукции, предоставить какой то ограниченный функционал который мы будет поддерживать независимо от аппаратной реализации ключей. И указанная вами функция в список не входит, т.к. для работы со временем у нас есть модели Code Time.

Поэтому вы можете самостоятельно посмотреть что за процессор в вашем ключе, воспользоваться Google и изучить вопрос. Это самый надежный метод. Я же отправлю запрос разработчикам и попробую поставить вопрос о включении такой возможности в декларируемый API наших ключей, но по срокам ничего обещать не могу.

Готового решения для текущего поколения ключей у нас нет.

Re: Время в GuardantCode

Ответ зачтён и понят.

Со своей стороны хочу предложить несколько идей:

  • Можно добавить функцию GcaGetUptime() -- сколько времени прошло с момента подключения устройства

  • Можно модифицировать функцию GcaGetTime() чтобы на НЕ time ключах выдавала время с компьютера и при этом возвращала код ошибки GrdE_NoService, например. Сейчас поля данных не инициализируются

Понятно, что компании надо продавать Guardant Time, и понятно, что функционал обычных Code должен быть меньше. Предлагаю только сделать это не за счёт полного отключения функционала,, а лучше за счёт снижения точности. Например GcaGetUptime() может возвращать только число секунд, а GcaGetTime() на не-Time ключах априори не подходит для защитных алгоритмов, так что Code и Code-Time не конкуренты. Кстати и точность тоже можно понизить.

PS: как мне кажется, такой функционал будет полезен для всех типов ключей, включая старые ARM.