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

 
 
> Непонятки с функцией memcpy
Harvester
сообщение Aug 13 2015, 08:23
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Добрый день.
Процессор ARM11, компилятор ADS 1.2
Имеется следующая функция:
Код
UCHAR RFC4357_KeyUnwrap(GOST28147_BCTX_PTR pX,
                        RFC4357_WRAPPED_KEY_PTR pWrappedKey,
                        PUCHAR pUnwrappingKey,
                        PUCHAR pUnwrappedKey) {
  UCHAR kd[32];
  UCHAR ke[32];

  /* calc diversified key */
  memcpy(kd, pUnwrappingKey, 32);
...
  /* decrypt key */
  memcpy(ke, pWrappedKey->KEY, 32);
...
}

Во время второго вызова memcpy() возникает исключение Misaligned. И действительно, перед вызовом функции R1 = 010CF0BA.
Из листинга видно, что при первом вызове вызывается функция __rt_memcpy, а при втором - __rt_memcpy_w.
Собственно, вопросы:
1. Из каких соображений компилятор в 1-м случае поставил функцию побайтного копирования, а во 2-м - пословного?
2. Как сказать компилятору, чтобы он во 2-м случае тоже использовал __rt_memcpy?


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Aug 13 2015, 08:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Код
UCHAR RFC4357_KeyUnwrap(GOST28147_BCTX_PTR pX,
                         __packed RFC4357_WRAPPED_KEY_PTR pWrappedKey,
                         PUCHAR pUnwrappingKey,
                         PUCHAR pUnwrappedKey)

И так везде. Но лучше бы выровнять.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 13 2015, 09:26
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(aaarrr @ Aug 13 2015, 11:40) *
Код
UCHAR RFC4357_KeyUnwrap(GOST28147_BCTX_PTR pX,
                         __packed RFC4357_WRAPPED_KEY_PTR pWrappedKey,
                         PUCHAR pUnwrappingKey,
                         PUCHAR pUnwrappedKey)

И так везде. Но лучше бы выровнять.

Не прокатило sad.gif .
Нашел вот-такой документ: How do the ARM Compilers handle memcpy()?
Попробовал с промежуточным указателем на char - помогло, __rt_memcpy_w превратилась в __rt_memcpy.
Но все-таки логика компилятора мне непонятна. Дело в том, что ниже в функции есть вызов memcpy(pX->ectx.N, pWrappedKey->UKM, 8) - он транслируется в __rt_memcpy без всяких ухищрений.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 13 2015, 09:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Harvester @ Aug 13 2015, 12:26) *
Не прокатило sad.gif .

Не прокатило в каком смысле - компилятор __packed не понимает, или все равно оставил __rt_memcpy_w?

Цитата(Harvester @ Aug 13 2015, 12:26) *
Но все-таки логика компилятора мне непонятна. Дело в том, что ниже в функции есть вызов memcpy(pX->ectx.N, pWrappedKey->UKM, 8) - он транслируется в __rt_memcpy без всяких ухищрений.

А какая связь между этим memcpy и первым?
Go to the top of the page
 
+Quote Post
Harvester
сообщение Aug 13 2015, 10:00
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(aaarrr @ Aug 13 2015, 12:44) *
Не прокатило в каком смысле - компилятор __packed не понимает, или все равно оставил __rt_memcpy_w?


А какая связь между этим memcpy и первым?

1. Оставил __rt_memcpy_w
2. И там и там 2-м параметром используется невыровненный указатель (входной параметр функции)


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Harvester   Непонятки с функцией memcpy   Aug 13 2015, 08:23
- - aaarrr   Цитата(Harvester @ Aug 13 2015, 11:23) 1....   Aug 13 2015, 08:29
|- - Harvester   Цитата(aaarrr @ Aug 13 2015, 11:29) То ес...   Aug 13 2015, 08:37
||- - aaarrr   Цитата(Harvester @ Aug 13 2015, 13:00) 1....   Aug 13 2015, 10:31
||- - Harvester   Цитата(aaarrr @ Aug 13 2015, 13:31) 1. Ес...   Aug 13 2015, 10:49
||- - aaarrr   Цитата(Harvester @ Aug 13 2015, 13:49) эт...   Aug 13 2015, 10:58
|- - scifi   Цитата(Harvester @ Aug 13 2015, 12:26) На...   Aug 13 2015, 10:08
|- - Harvester   Цитата(scifi @ Aug 13 2015, 13:08) Кстати...   Aug 13 2015, 10:30
- - Golikov A.   я бы __packed под typdef сразу запихал бы...   Aug 13 2015, 08:48
- - Golikov A.   Цитата1. Оставил __rt_memcpy_w а как вы написали? ...   Aug 13 2015, 10:24
- - scifi   Цитата(Harvester @ Aug 13 2015, 12:26) Но...   Aug 13 2015, 10:40
|- - Harvester   Цитата(scifi @ Aug 13 2015, 13:40) Ничего...   Aug 13 2015, 11:21
|- - aaarrr   Цитата(Harvester @ Aug 13 2015, 14:21) По...   Aug 13 2015, 11:30
- - Golikov A.   указатель, а не структуру предлагают ... но все же...   Aug 13 2015, 11:38
- - aaarrr   Цитата(Golikov A. @ Aug 13 2015, 14:38) А...   Aug 13 2015, 11:51


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

 


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


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