Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Тестирование на схожесть кода  (Прочитано 799 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Тестирование на схожесть кода
« : 12 Января 2012, 17:09:36 »
Нужна программка для поиска кусков кода, "сворованных" из другого проекта. Причём программка должна не просто diff делать понятно дело, а чуть более интелектуально подходить к вопросу. Переменные там переименованные уметь определять и прочие плюшки. Задача понятна - понять, есть ли что-то из GPL проекта в не-GPL)) Да, язык - PHP+JavaScript+XML.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Charles Malaheenee

  • Активист
  • *
  • Сообщений: 756
  • Учтите, мы можем дать и вредный совет.
    • Просмотр профиля
Re: Тестирование на схожесть кода
« Ответ #1 : 12 Января 2012, 17:25:01 »
А как быть с задачами, которые можно сделать только одним путем? Код здесь будет одинаков, хоть тресни.
Все мы где-то, когда-то и в чем-то были новичками.

Оффлайн Malamut

  • Автор темы
  • Ubuntu Member
  • Администратор
  • Старожил
  • *
  • Сообщений: 3337
  • Я добрый, честно!
    • Просмотр профиля
    • Моя страница на Launchpad
Re: Тестирование на схожесть кода
« Ответ #2 : 12 Января 2012, 17:30:23 »
Да это я уже сам решу)) Мне надо только чтобы были показаны потенциально схожие куски кода, чтобы в ручную не анализировать все файлы.
"Носителем суверенитета и единственным источником власти в Российской Федерации является ее многонациональный народ" Конституция РФ

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
Re: Тестирование на схожесть кода
« Ответ #3 : 12 Января 2012, 18:11:20 »
если сравнивать просто куски кода (а не алгоритмы, которые реализует код), то можно рассматривать исходники как почти обычный текст. Нужно только определиться, насколько большие должны быть куски (нет особого смысла искать совпадающие строки типа $i=0;), брать группу из n строк из одного и искать в другом. Многое от исторического контекста зависит, конечно. Если человек сознательно нарушал, то мог переменные переименовать и строки переставить, тогда нужно чуть более хитрые алгоритмы использовать.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Тестирование на схожесть кода
« Ответ #4 : 13 Января 2012, 11:14:41 »
Что насчет такого?

unsigned x = 0;
__m128i x0, x1, x2, x3, x4, x5, x6, x7;
__m128i *pshuffle128 = (__m128i *)shuffle;
__m128i *pMask = (__m128i *)mask;

if (cpu & CPU_CAPABILITY_SSSE3) {
  for (; x < (width & ~31); x += 32) {
    uint8_t *dst1 = dstv + x;
    uint8_t *dst2 = dstu + x;
    __m128i *pSrc = (__m128i *)(src + 2 * x);
            // синтаксис AT&T: cmd    source,       destination
            // asm volatile (
    x7 = _mm_loadu_si128(pshuffle128);// "movdqu (%[shuffle]), %%xmm7\n"
    x0 = _mm_load_si128(pSrc + 0);    // "movdqa  0(%[src]),   %%xmm0\n"
    x1 = _mm_load_si128(pSrc + 1);    // "movdqa 16(%[src]),   %%xmm1\n"
    x2 = _mm_load_si128(pSrc + 2);    // "movdqa 32(%[src]),   %%xmm2\n"
    x3 = _mm_load_si128(pSrc + 3);    // "movdqa 48(%[src]),   %%xmm3\n"
    x0 = _mm_shuffle_epi8(x0, x7);    // "pshufb  %%xmm7, %%xmm0\n"
    x1 = _mm_shuffle_epi8(x1, x7);    // "pshufb  %%xmm7, %%xmm1\n"

....

      // : : [dst1]"r"(&dstu[x]), [dst2]"r"(&dstv[x]), [src]"r"(&src[2*x]), [shuffle]"r"(shuffle) : "memory");
}
Справа в комментах - исходный код из VLC, там еще #define-ы были, я их подставил. Слева - эквивалентный, если верить MSDN, код для MSVC++. Результат работы, по крайней мере, тот же.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.028 секунд. Запросов: 25.