Забавные новости 0й-Ti :)

Тема в разделе "WASM.HEAP", создана пользователем UbIvItS, 18 июн 2018.

Статус темы:
Закрыта.
  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    А это не проблема: ты можешь использовать специализацию. Для 32х-битных типов шаблон развернётся в одно, для 64х-битных в другое.

    Там речь про поиск сигнатурок в бинарнике - поиск последовательности байт, которая удовлетворяет заданным условиям.
    Типа того, что найти последовательность байт 11 22 ?? FF (где ?? может быть любым).
    Такое часто используют в читах, чтобы найти в бинарнике какую-нибудь неэкспортирующуюся функцию
     
  2. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    в идеале все эти вещи можно внедрить в компиль и даже прилично автоматизировать процесс укладки функи в окошко реалтайма, но в нашей Бренной Реальщине жестянки довольно разношёрстные, поэтому лепят чудовища франкинштейна аль просто горбатого :)
    меня смутила твоя ремарка..
    а при чём там компиль-тайм???
     
  3. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    А компиль для каждой сигнатурки сгенерит отдельный код - без циклов, без вызовов функций, без проверок длин сигнатуры (ведь он знает её). Всё развернёт, заинлайнит, и рекурсивная гора сложных шаблонов превращается в очень простой плоский и линейный код. А главное, в очень быстрый.
     
  4. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    то бишь он отдельно генерит..
    * 11 22 00 ff
    * 11 22 01 ff
    ......
    * 11 22 ff ff
    =====
    так???
     
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Неа, вот так (ищем паттерн 11 22 33 44 ?? 11 22):
    upload_2023-11-16_20-14-9.png

    Внутри это была сложная простыня шаблонов с рекурсией. А компилятор всё свернул в 12 инструкций.
     
    Последнее редактирование: 16 ноя 2023
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Так а зачем изначально писать сложную простыню шаблонов с рекурсией, чтобы компиль потом ее во что-то сворачивал?
    Код (C):
    1.  
    2. sig.h
    3.  
    4. #define BEGIN_SIG(name, sigSize) \
    5. static void* ___FindSig_##name (const void* data, uint32_t size) \
    6. { \
    7.     uint32_t pos; \
    8.     if (sigSize < size) \
    9.     { \
    10.         for (pos = 0; pos < size - sigSize; pos++) \
    11.         {
    12.  
    13. #define END_SIG() \
    14.             return (uint8_t*)data + pos; \
    15.         } \
    16.     } \
    17.     return NULL; \
    18. }
    19.  
    20. #define SIG_BYTE(value)    if (*((uint8_t*)data + pos) != (value)) continue; else pos += sizeof(uint8_t)
    21. #define SIG_WORD(value)    if (*((uint16_t*)data + pos) != (value)) continue; else pos += sizeof(uint16_t)
    22. #define SIG_DWORD(value)    if (*((uint32_t*)data + pos) != (value)) continue; else pos += sizeof(uint32_t)
    23. #define SIG_QWORD(value)    if (*((uint64_t*)data + pos) != (value)) continue; else pos += sizeof(uint64_t)
    24.  
    25. #define SIG_ANY_BYTE()      pos += sizeof(uint8_t)
    26. #define SIG_ANY_WORD()      pos += sizeof(uint16_t)
    27. #define SIG_ANY_DWORD()     pos += sizeof(uint32_t)
    28. #define SIG_ANY_QWORD()     pos += sizeof(uint64_t)
    29. #define SIG_FIND(name, data, size)  ___FindSig_##name ((data), (size))
    30.  
    Код (C):
    1.  
    2. main.c
    3.  
    4. #include "sig.h"
    5.  
    6. BEGIN_SIG (Test, 7)
    7.     SIG_DWORD (0x44332211);
    8.     SIG_ANY_BYTE ();
    9.     SIG_BYTE (0x11);
    10.     SIG_BYTE (0x22);
    11. END_SIG ()
    12.  
    13. int main ()
    14. {
    15.     printf ("Found %p\n", FIND_SIG (Test, buf, k_size));
    16. }
    17.  
    :)
     
    UbIvItS нравится это.
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    rmn, сишно :)
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    У меня кончились аргументы)
     
    UbIvItS нравится это.
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Сишечка победила :)
     
    UbIvItS нравится это.
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    есть один ж/б аргумент - обфускация сорца.. можно и второй - тест компиля на скорость, и третий - своя стилистика кода :)
     
    aa_dav нравится это.
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.314
    Нельзя просто так взять и победить местных элитных цэ-адептов)
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    любопытная новость.. есть сомнения в таком подходе, но наблюдаем дальше :)
     
  13. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    А элементы Пельтье случайно не на похожем принципе работают?
     
  14. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    607
    Забавные новости 0й-Ti :)

    Забавно? А мне не забавно. Сейчас пытаюсь портировать код MD5 на питухоний, в общем, возможно я его не знаю, но по мне это порождение дьявола, просто чудовищный ЯП. Самый лучший лёгкий ЯП, это конечно высокоуровневый ассемблер, и это ещё всё не UASM, хотя он пытается им стать. Хорош С++, но всё же...
    Как клятом питухонии переопределить указатель, чтобы dword'ы читались как байты и наоборот? Хотя о чём я? Бред несу как обычно. Не получиться. Ладно попробую с этим бесом ещё повоевать.
    // Процесс обработки частичного блока.
    const u8 *p = data;
    ...
    Append((const u8 *)&count_bits, 8);
    где u32 count_bits[2];
    count_bits должен превратиться в 4+4=8 байт.
    ЗЫ
    Прототипирование говорите? Да по мне лучше этим на ассме заниматься. Ну по крайней мере если речь идёт о эмуляторах процессорах, где надо крутить целочисленную арифметику, да ещё в определённом формате.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.314
    https://docs.python.org/3/library/hashlib.html

    Именно.
     
  16. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    Intro, а покажи, что у тебя получилось.
    Подозреваю, что ты пытаешься писать на питоне так же, как писал бы на си - с указателями и всякими низкоуровневыми концепциями, которые в питоне неприменимы.
    Давай посмотрим, что у тебя получилось и как можно это переписать лучше.
     
  17. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    607
    Rel, мне надо для тестов, где питухоний заведомо в худших условиях, т.к. это дебильный ЯП по определению проигрывает нормальным ЯП в целочисленной арифметики.
    Я знаю что для хешей надо внешнею функцию вызвать из библиотеки. Туже функцию и в С++ вызывают, иначе делают если конечно по каким-то причинам эта библиотека не доступна.
    HoShiMin, чуть позже. У меня почти получилось, и я немного начал понимать, всё таки на Lua уже почти 10 лет программирую.
    --- Сообщение объединено, 17 ноя 2023 ---
    В общем, понял что дворды и поток байтов надо вручную преобразовывать, код уже не падает, но работает совсем неправильно, надо учитывать особенности скриптовых динамически типизированных ЯП. Думаю эту задачу на старом Луа вообще невозможно решить, только с версии 5.3 доступна целочисленная арифметика. И ещё, код капец какой медленный, это не десятки, а в тысячи медленней, как и положено скриптовому ЯП.
     
  18. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    На скорость можно забить, главное, чтобы считало правильно. Питон интерпретируемый, в нём нет JIT-компилятора, на нём ты даже близко не приблизишься по скорости к нативному коду.
    Если хочется побыстрее - можно взять PyPy - в нём уже есть JIT и должно быть повеселее, но он не равноценная замена, многие библиотеки требуют именно официальный CPython (тот, на котором ты пишешь сейчас).
    --- Сообщение объединено, 17 ноя 2023 ---
    Кстати, Intro, зачем вообще тебе питон? Обычно его берут, когда уже знают, зачем он им нужен.
    Я наверно за всю жизнь его использовал три-четыре раза.
     
  19. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    607
    HoShiMin, забил в ютуб "сравнение на скорость питон, си ассемблер", получил ролики, где тестируют алго поиск простых чисел, разница с С/Ассм и питухония всего в 10 раз, а один ролик нашёл, где разница совсем маленькая. А это значит, что многие начинающие, введены в заблуждения на счёт реальной скорости питухония.
     
  20. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.477
    Адрес:
    Россия, Нижний Новгород
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/python3-gcc.html
    От x10 до x250.
    Твой md5, думаю, будет раз в 100 медленнее сишного (особенно если взять хорошо оптимизированный вариант).

    Начинающих, кстати, сложно ввести в заблуждение: они же сами в своих программах видят, хватает им скорости или нет. Если не хватает - просто берут что-то нативное или с JIT’ом.
    Но обычно питон юзают там, где хватает.
     
    Последнее редактирование: 17 ноя 2023
Статус темы:
Закрыта.