Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Привет котики!

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

Обсудите.

@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. Спрасибо Андрейке за каламбур.
6 ноя 20, 18:16    [22227683]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
А зачем "<Void,Void>" ?

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

Недостатки - компиляция/построение в момент выполнения:
проблемы с безопасностью
проблемы с отладкой (бреак поинты поставить не получится)
перформанс (если правильно буилдить один раз при запуске приложение, не критично)
6 ноя 20, 18:33    [22227694]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
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.

Сообщение было отредактировано: 6 ноя 20, 18:33
6 ноя 20, 18:35    [22227697]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Если это переписать так

public PlatformBinary<Void,Void> buildHelloWorld() {...}


и объявить синглтоном то вопросы перформанса уходят. Остаётся просто
технический стек. Собрать это через "as/nasm" в рантайме. Положить
в локальный фолдер helloWorld.o, и вызвать через обычный native
как java делает с библиотеками. Здесь просто важно чтобы бинарник
был создан до того как будет вызван статик-конструктор JNI-переходника.
6 ноя 20, 18:37    [22227700]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
mayton

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

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

mayton

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

просто в память
6 ноя 20, 18:40    [22227702]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Leonid Kudryavtsev
mayton

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

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

100% ты прав. Я сразу думал о динамической компилляции. Просто думаю что
не потяну чисто по человечески. Фигли. Свой компиллятор создать и линкер.
6 ноя 20, 18:41    [22227703]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
Что здесь обсуждать не будем - причины.

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

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

НО сделать реализацию
автор
подмножества
команд, например: MMX, SSE2 - IMHO смысл уже появляется. Команд меньше, реально сделать реализацию и протестировать на какой нибудь более-менее осмысленной задаче.
6 ноя 20, 18:44    [22227704]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример
как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет
какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть
внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект.
6 ноя 20, 19:05    [22227707]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
mayton
Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример
как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет
какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть
внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект.

И цикл и, самое главное (сложное), memory model.
6 ноя 20, 19:10    [22227709]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
Проблемы чисто "кодинга", как я вижу:

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

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

Оптимально реализовывать две ветки:
Бинарный код (трансляция и бинарное выполнение)
Полностью софтовый (будет жутко медленно, но появляется возможность дебага/обучения)

Сообщение было отредактировано: 6 ноя 20, 19:08
6 ноя 20, 19:12    [22227711]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства.
Я-бы оформил базовые интерфейсы. А кто-то бы наполнил имплементацию.

Но кто доброволец?
6 ноя 20, 19:16    [22227714]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
mayton,

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

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

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

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

Минимальная PE-DLL для винды не слишком велика.
6 ноя 20, 19:16    [22227715]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
Список инструкций SSE2:
https://docs.oracle.com/cd/E18752_01/html/817-5477/epmpv.html

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

для начала можно ограничится одним вариантом amd64 + Windows. Linux и backport to 32 бита если что-то заведется
6 ноя 20, 19:20    [22227717]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
MMX - уже сильно устарел
SSE3,4,5....100500 - можно и потом добавить

в общем, SSE2 наверное золотая середина для 2000-ных годов ))) /а кто скажет, что 2020 не 2000-ые пусть первым бросит в меня камень ))) /
6 ноя 20, 19:21    [22227718]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Да насчет AVX-512 я поторопился. Это слишком новая технология. А я хотел чтоб была совместимость
с моим Ryzen-5. Пожалуй сделаю шаг назад.

Да и нужно какой-то алгоритм интересный взять для демо. Я мог-бы взять проверку простоты числа.
Но он для SIMD не подходит. Тут надо какое-то действие над массивом делать.
6 ноя 20, 19:24    [22227719]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
mayton,

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

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

Из простого - объемную диффузию посчитать от разнородных источников. Легко раскрасить для демо.
6 ноя 20, 20:18    [22227751]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Да. Нейронка это мысль. Но там - умножение матриц - это 1 слой.

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

Что такое объемная диффузия - не знаю.
6 ноя 20, 21:04    [22227767]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
shalamyansky
Member

Откуда:
Сообщений: 197
А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая?

Не, понятно, это не вопрос к концепту, просто к слову пришлось.
6 ноя 20, 21:07    [22227771]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
shalamyansky
А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая?

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

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

Надо искать задачи которые в Java раскрывают возможности современного процессора.
6 ноя 20, 21:09    [22227774]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Может сделать упор на FPU ?

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

Красиво. 80битная вещественная точность. И заодно вспомню калькулятор МК-60.
6 ноя 20, 21:33    [22227787]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
mayton

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




Модели многих сложных процессов строятся по клеточному принципу, как у вольфрама.

Чернила в прозрачной подогреваемой среде дают эффектные узоры для демонстрации, а практическая применимость клеточных моделей вопросов не вызывает.

И контрастную диффузию легче рисовать чем, скажем, волны (гидродинамика также пользуется этими методами).
7 ноя 20, 02:47    [22227870]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Up. Без elf-генерации тут не обойтись. И хотя спека не выглядит уж слишком сложной
https://ru.wikipedia.org/wiki/Executable_and_Linkable_Format я начал искать парсеры.

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

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

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

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 генерирует парсер. Поддерживаются языки

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 тоже в качестве примера и приаттачу сюда.
22 ноя 20, 16:06    [22236574]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9249
Зачем какие-то форматы, парсеры?

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

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

IMHO & AFAIK
22 ноя 20, 16:09    [22236576]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Я предвидел вопрос о JNI и взаимодействии java-heap - native.
Я скажу так что нужно в ассемблер переносить не 1 инструкцию
а целый алгоритм. С циклами. И с ощутимым временем отклика
хотя бы в 1 порядок превышающим накладные на JNI.

Осилит ли java-ист написание целого алгоритма на assembler -
я не знаю. Этот вопрос - за кадром. Но я вобщем и не спрашиваю.
Собственно тема интересна только тем разработчикам которые
хотя-бы что-то в этом знают и ищут.
22 ноя 20, 16:16    [22236580]     Ответить | Цитировать Сообщить модератору
 Re: Пятничный ПОЦ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
По смыслу katiai очень напоминает Yacc/Bizon/Antlr с той разницей что изначально заточен
на парсинг бинарных файлов а Яки и Бизоны - на тексты и исходники программ.
22 ноя 20, 17:19    [22236600]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Программирование Ответить