powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничный ПОЦ.
25 сообщений из 42, страница 1 из 2
Пятничный ПОЦ.
    #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
Пятничный ПОЦ.
    #40016065
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем "<Void,Void>" ?

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

Недостатки - компиляция/построение в момент выполнения:
проблемы с безопасностью
проблемы с отладкой (бреак поинты поставить не получится)
перформанс (если правильно буилдить один раз при запуске приложение, не критично)
...
Рейтинг: 0 / 0
Пятничный ПОЦ.
    #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
Пятничный ПОЦ.
    #40016070
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это переписать так

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



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

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

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

mayton

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Минимальная PE-DLL для винды не слишком велика.
...
Рейтинг: 0 / 0
Пятничный ПОЦ.
    #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
Пятничный ПОЦ.
    #40016085
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MMX - уже сильно устарел
SSE3,4,5....100500 - можно и потом добавить

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

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

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

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

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

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

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

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

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

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

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

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

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

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


YouTube Video
...
Рейтинг: 0 / 0
Пятничный ПОЦ.
    #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
Пятничный ПОЦ.
    #40021094
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем какие-то форматы, парсеры?

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

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

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

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


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