Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничный ПОЦ. / 25 сообщений из 42, страница 1 из 2
06.11.2020, 18:16
    #40016058
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Привет котики!

С пятницей всех. Сегодня ваш кот придумал Proof-of-Concept.

Обсудите.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Native("x86")
public PlatformBinary<Void,Void> helloWorld() {
    Platform.x86().builder()
     .withCode()
        org(0x100).
        mov(dx,"msg").
        mov(ah,9).
        interrupt(0x21).
        mov(ah,0x4C).
        interrupt(0x21).
     .withData().
        db("msg","'Hello, World!',0Dh,0Ah,'$'")
    .build()
}



Что будем обсуждать - возможности.

Что здесь обсуждать не будем - причины.

Go-Go!

P.S. Спрасибо Андрейке за каламбур.
...
Рейтинг: 0 / 0
06.11.2020, 18:33
    #40016065
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
А зачем "<Void,Void>" ?

Как концепт - оригинально
Замечание к концепту:
буилдер должен буилдить (копилить)
а выполнять наверное нужно метод Run

Недостатки - компиляция/построение в момент выполнения:
проблемы с безопасностью
проблемы с отладкой (бреак поинты поставить не получится)
перформанс (если правильно буилдить один раз при запуске приложение, не критично)
...
Рейтинг: 0 / 0
06.11.2020, 18:35
    #40016067
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
mayton

Что будем обсуждать - возможности.

А чего тут обсуждать, ничего не возможного я не вижу
главное, что бы у сегмента памяти не стояло галочки запрета выполнения.
А так: создал в памяти, перешел, выполнилось

https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc
https://docs.microsoft.com/en-us/windows/win32/memory/memory-protection-constants

PAGE_EXECUTE Enables execute access to the committed region of pages.
...
Рейтинг: 0 / 0
06.11.2020, 18:37
    #40016070
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Если это переписать так

Код: java
1.
public PlatformBinary<Void,Void> buildHelloWorld() {...}



и объявить синглтоном то вопросы перформанса уходят. Остаётся просто
технический стек. Собрать это через "as/nasm" в рантайме. Положить
в локальный фолдер helloWorld.o, и вызвать через обычный native
как java делает с библиотеками. Здесь просто важно чтобы бинарник
был создан до того как будет вызван статик-конструктор JNI-переходника.
...
Рейтинг: 0 / 0
06.11.2020, 18:40
    #40016072
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
mayton

Собрать это через "as/nasm" в рантайме.

Если все равно имплементить все команды в виде ф-ций, то нафиг нужен as/nasm ? сразу машинный код.

mayton

Положить в локальный фолдер helloWorld.o, и вызвать через обычный native
как java делает с библиотеками

просто в память
...
Рейтинг: 0 / 0
06.11.2020, 18:41
    #40016073
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Leonid Kudryavtsev
mayton

Собрать это через "as/nasm" в рантайме.

Если все равно имплементить все команды в виде ф-ций, то нафиг нужен as/nasm ? сразу машинный код.

100% ты прав. Я сразу думал о динамической компилляции. Просто думаю что
не потяну чисто по человечески. Фигли. Свой компиллятор создать и линкер.
...
Рейтинг: 0 / 0
06.11.2020, 18:44
    #40016074
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Что здесь обсуждать не будем - причины.

Без этого это очередной вброс и флейм ни о чем

Делать реализацию ассемблера x86 или amd64 - лично я смысла не вижу

НО сделать реализацию авторподмножества команд, например: MMX, SSE2 - IMHO смысл уже появляется. Команд меньше, реально сделать реализацию и протестировать на какой нибудь более-менее осмысленной задаче.
...
Рейтинг: 0 / 0
06.11.2020, 19:05
    #40016076
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример
как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет
какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть
внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект.
...
Рейтинг: 0 / 0
06.11.2020, 19:10
    #40016077
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
mayton
Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример
как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет
какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть
внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект.

И цикл и, самое главное (сложное), memory model.
...
Рейтинг: 0 / 0
06.11.2020, 19:12
    #40016079
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Проблемы чисто "кодинга", как я вижу:

Минимум две архитектуры процессора (коды инструкций):
x86
amd64

Минимум две ОС (выделение памяти, установка PAGE_EXECUTE):
Windows
Linux (POSIX?)

Оптимально реализовывать две ветки:
Бинарный код (трансляция и бинарное выполнение)
Полностью софтовый (будет жутко медленно, но появляется возможность дебага/обучения)
...
Рейтинг: 0 / 0
06.11.2020, 19:16
    #40016081
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства.
Я-бы оформил базовые интерфейсы. А кто-то бы наполнил имплементацию.

Но кто доброволец?
...
Рейтинг: 0 / 0
06.11.2020, 19:16
    #40016082
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
mayton,

Такой код Винда любит намеренно ломать, т.к. он похож на то, чем любят заниматься эксплоиты.

Как/когда это сломается, и как это обойти - доков не будет (зачем мсофту образовывать хакеров себе в ущерб).

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

Однако можно на лету создать ДЛЛ и подгрузить ее в процесс. Проходит через лоадер - официально поддерживается, кроме некоторых залоченых систем.

Минимальная PE-DLL для винды не слишком велика.
...
Рейтинг: 0 / 0
06.11.2020, 19:20
    #40016084
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Список инструкций SSE2:
https://docs.oracle.com/cd/E18752_01/html/817-5477/epmpv.html

Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства.

для начала можно ограничится одним вариантом amd64 + Windows. Linux и backport to 32 бита если что-то заведется
...
Рейтинг: 0 / 0
06.11.2020, 19:21
    #40016085
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
MMX - уже сильно устарел
SSE3,4,5....100500 - можно и потом добавить

в общем, SSE2 наверное золотая середина для 2000-ных годов ))) /а кто скажет, что 2020 не 2000-ые пусть первым бросит в меня камень ))) /
...
Рейтинг: 0 / 0
06.11.2020, 19:24
    #40016086
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Да насчет AVX-512 я поторопился. Это слишком новая технология. А я хотел чтоб была совместимость
с моим Ryzen-5. Пожалуй сделаю шаг назад.

Да и нужно какой-то алгоритм интересный взять для демо. Я мог-бы взять проверку простоты числа.
Но он для SIMD не подходит. Тут надо какое-то действие над массивом делать.
...
Рейтинг: 0 / 0
06.11.2020, 20:18
    #40016104
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
mayton,

Решение в поиске задачи? :)

Нейронную сеть сделайте. Они модные, и там массивы больше.

Из простого - объемную диффузию посчитать от разнородных источников. Легко раскрасить для демо.
...
Рейтинг: 0 / 0
06.11.2020, 21:04
    #40016119
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Да. Нейронка это мысль. Но там - умножение матриц - это 1 слой.

Надо будет соединять несколько слоёв. +Функции активации. На ассемблере я врядли такой сложности код
сразу напишу. Хотелось-бы в качестве демо что-то попроще. И чтобы цикл был внутри ассемблера.

Что такое объемная диффузия - не знаю.
...
Рейтинг: 0 / 0
06.11.2020, 21:07
    #40016121
shalamyansky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая?

Не, понятно, это не вопрос к концепту, просто к слову пришлось.
...
Рейтинг: 0 / 0
06.11.2020, 21:09
    #40016123
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
shalamyansky
А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая?

Не, понятно, это не вопрос к концепту, просто к слову пришлось.

Не обращайте внимание на 21 прерывание. Это просто я скопи-пастил чтоб показать
возможности инлайн ассемблера. Конечно в данном примере практического смысла никакого нет.

Надо искать задачи которые в Java раскрывают возможности современного процессора.
...
Рейтинг: 0 / 0
06.11.2020, 21:33
    #40016128
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Может сделать упор на FPU ?

https://en.wikibooks.org/wiki/X86_Assembly/Floating_Point

Красиво. 80битная вещественная точность. И заодно вспомню калькулятор МК-60.
...
Рейтинг: 0 / 0
07.11.2020, 02:47
    #40016163
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
mayton

Что такое объемная диффузия - не знаю.


YouTube Video
...
Рейтинг: 0 / 0
22.11.2020, 16:06
    #40021092
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Up. Без elf-генерации тут не обойтись. И хотя спека не выглядит уж слишком сложной
https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format я начал искать парсеры.

Почему парсеры? Ну... чтобы правильно генерить надо сначала понять как он устроен внутри.
Идея такая. Я беру ассемблер GNU assembler. Пишу на нем хейлохты-ворлд и просто смотрю
как он устроен. Особо меня интересуют всякие формальные шапки и декларации и соглашения
по вызову.

Как только я пойму его минимальную структуру которая нужна - вставка ассемблера будет
задачей итеративной. По сути я даже предполагаю что ассемблер будет жлобский и ограниченный.
Далее я расчитываю что опенсорц-сообщество поможет его доделать.

По поводу парсеров. Есть такая технология kaitai struct https://kaitai.io/
Я вчера ее опробовал. Вобщем идея такая. Вы формируете некий декларативный
описатель формата. Например для *.dbf файлов (фрагмент).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
meta:
  id: dbf
  file-extension: dbf
  application: dBASE
  license: CC0-1.0
  xref:
    justsolve: DBF
    loc: fdd000325
    pronom: x-fmt/9
    wikidata: Q16545707
  endian: le
seq:
  - id: header1
    type: header1
  - id: header2
    size: header1.len_header - 12
    type: header2
  - id: records
    size: header1.len_record
    repeat: expr
    repeat-expr: header1.num_records
types:
  header1:
    doc-ref: http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm - section 1.1
    seq:
      - id: version
        type: u1
      - id: last_update_y
        type: u1
      - id: last_update_m
        type: u1
      - id: last_update_d
        type: u1
      - id: num_records
        type: u4
      - id: len_header
        type: u2
      - id: len_record
        type: u2
..............
......
...



И по этому описателю фреймворк kaitai генерирует парсер. Поддерживаются языки

Код: java
1.
graphviz, csharp, rust, all, perl, java, go, cpp_stl, php, lua, python, nim, html, ruby, construct, javascript



Тоесть описатель почти полностью гетерогенный. Вчера с тогоже сайта стянул описание формата .elf
и попробовал парсить свой каталог /usr но валят ошибки. Предполагаю что у меня 64х битная Linux, а
образец elf.ksy исторически как демо пример был создан для 32х битных архитектур. Еще не разбирался.

Я программирую на java, но будет демократичным дать форуму тоже возможность пощупать парсер.
Поэтому я сделаю под csharp, python, cpp_stl тоже в качестве примера и приаттачу сюда.
...
Рейтинг: 0 / 0
22.11.2020, 16:09
    #40021094
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Зачем какие-то форматы, парсеры?

Код, это просто byte[].
Ассемблер просто инструкцию в byte преобразовывает. Выделить память, заполнить кодом, поставить признак executable... запустить... словить GPF error )))

Скорее тут надо хорошая идея по работе с данными для алгоритмов. Т.к. заталкивание данных heap <--> native самое долгое и ресурсозатратное.

IMHO & AFAIK
...
Рейтинг: 0 / 0
22.11.2020, 16:16
    #40021097
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
Я предвидел вопрос о JNI и взаимодействии java-heap - native.
Я скажу так что нужно в ассемблер переносить не 1 инструкцию
а целый алгоритм. С циклами. И с ощутимым временем отклика
хотя бы в 1 порядок превышающим накладные на JNI.

Осилит ли java-ист написание целого алгоритма на assembler -
я не знаю. Этот вопрос - за кадром. Но я вобщем и не спрашиваю.
Собственно тема интересна только тем разработчикам которые
хотя-бы что-то в этом знают и ищут.
...
Рейтинг: 0 / 0
22.11.2020, 17:19
    #40021110
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничный ПОЦ.
По смыслу katiai очень напоминает Yacc/Bizon/Antlr с той разницей что изначально заточен
на парсинг бинарных файлов а Яки и Бизоны - на тексты и исходники программ.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничный ПОЦ. / 25 сообщений из 42, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]