|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Привет котики! С пятницей всех. Сегодня ваш кот придумал Proof-of-Concept. Обсудите. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Что будем обсуждать - возможности. Что здесь обсуждать не будем - причины. Go-Go! P.S. Спрасибо Андрейке за каламбур. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
А зачем "<Void,Void>" ? Как концепт - оригинально Замечание к концепту: буилдер должен буилдить (копилить) а выполнять наверное нужно метод Run Недостатки - компиляция/построение в момент выполнения: проблемы с безопасностью проблемы с отладкой (бреак поинты поставить не получится) перформанс (если правильно буилдить один раз при запуске приложение, не критично) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:33 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:35 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Если это переписать так Код: java 1.
и объявить синглтоном то вопросы перформанса уходят. Остаётся просто технический стек. Собрать это через "as/nasm" в рантайме. Положить в локальный фолдер helloWorld.o, и вызвать через обычный native как java делает с библиотеками. Здесь просто важно чтобы бинарник был создан до того как будет вызван статик-конструктор JNI-переходника. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:37 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton Собрать это через "as/nasm" в рантайме. Если все равно имплементить все команды в виде ф-ций, то нафиг нужен as/nasm ? сразу машинный код. mayton Положить в локальный фолдер helloWorld.o, и вызвать через обычный native как java делает с библиотеками просто в память ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:40 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton Собрать это через "as/nasm" в рантайме. Если все равно имплементить все команды в виде ф-ций, то нафиг нужен as/nasm ? сразу машинный код. 100% ты прав. Я сразу думал о динамической компилляции. Просто думаю что не потяну чисто по человечески. Фигли. Свой компиллятор создать и линкер. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:41 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Что здесь обсуждать не будем - причины. Без этого это очередной вброс и флейм ни о чем Делать реализацию ассемблера x86 или amd64 - лично я смысла не вижу НО сделать реализацию авторподмножества команд, например: MMX, SSE2 - IMHO смысл уже появляется. Команд меньше, реально сделать реализацию и протестировать на какой нибудь более-менее осмысленной задаче. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 18:44 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:05 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton Мда... сделать упор на SIMD и векторизацию. При чем я предполагал что такой софистический пример как HelloWorld это просто tech-demo. На деле-же он никому не нужен. А вот циклический расчет какого-то алгоритма на AVX-512 регистрах может быть интересен. При чем цикл должен быть внутри ассемблерного бинарника. Иначе накладные на JNI сожрут весь полезный эффект. И цикл и, самое главное (сложное), memory model. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:10 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Проблемы чисто "кодинга", как я вижу: Минимум две архитектуры процессора (коды инструкций): x86 amd64 Минимум две ОС (выделение памяти, установка PAGE_EXECUTE): Windows Linux (POSIX?) Оптимально реализовывать две ветки: Бинарный код (трансляция и бинарное выполнение) Полностью софтовый (будет жутко медленно, но появляется возможность дебага/обучения) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:12 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства. Я-бы оформил базовые интерфейсы. А кто-то бы наполнил имплементацию. Но кто доброволец? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton, Такой код Винда любит намеренно ломать, т.к. он похож на то, чем любят заниматься эксплоиты. Как/когда это сломается, и как это обойти - доков не будет (зачем мсофту образовывать хакеров себе в ущерб). Общая философия - любой машинный (или .Net) код который не прошел через канал Вин-лоадера считается неправомерным, и подлежит остановке. Как это на других платформах, я не знаю. Помню что кому-то приходилось библиотеку regex переписывать, когда такие трюки с генерацией кода на лету в ОС запретили. Однако можно на лету создать ДЛЛ и подгрузить ее в процесс. Проходит через лоадер - официально поддерживается, кроме некоторых залоченых систем. Минимальная PE-DLL для винды не слишком велика. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Список инструкций SSE2: https://docs.oracle.com/cd/E18752_01/html/817-5477/epmpv.html Мда... тут насчет Windows/Linux это серъезный пласт работы. Много нудоства. для начала можно ограничится одним вариантом amd64 + Windows. Linux и backport to 32 бита если что-то заведется ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:20 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
MMX - уже сильно устарел SSE3,4,5....100500 - можно и потом добавить в общем, SSE2 наверное золотая середина для 2000-ных годов ))) /а кто скажет, что 2020 не 2000-ые пусть первым бросит в меня камень ))) / ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:21 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Да насчет AVX-512 я поторопился. Это слишком новая технология. А я хотел чтоб была совместимость с моим Ryzen-5. Пожалуй сделаю шаг назад. Да и нужно какой-то алгоритм интересный взять для демо. Я мог-бы взять проверку простоты числа. Но он для SIMD не подходит. Тут надо какое-то действие над массивом делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:24 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
mayton, Решение в поиске задачи? :) Нейронную сеть сделайте. Они модные, и там массивы больше. Из простого - объемную диффузию посчитать от разнородных источников. Легко раскрасить для демо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 20:18 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Да. Нейронка это мысль. Но там - умножение матриц - это 1 слой. Надо будет соединять несколько слоёв. +Функции активации. На ассемблере я врядли такой сложности код сразу напишу. Хотелось-бы в качестве демо что-то попроще. И чтобы цикл был внутри ассемблера. Что такое объемная диффузия - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:04 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая? Не, понятно, это не вопрос к концепту, просто к слову пришлось. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:07 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
shalamyansky А что, 21-е прерывание в Windows еще живет? Или это JVM под DOS, кстати, есть такая? Не, понятно, это не вопрос к концепту, просто к слову пришлось. Не обращайте внимание на 21 прерывание. Это просто я скопи-пастил чтоб показать возможности инлайн ассемблера. Конечно в данном примере практического смысла никакого нет. Надо искать задачи которые в Java раскрывают возможности современного процессора. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:09 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Может сделать упор на FPU ? https://en.wikibooks.org/wiki/X86_Assembly/Floating_Point Красиво. 80битная вещественная точность. И заодно вспомню калькулятор МК-60. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 21:33 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
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.
И по этому описателю фреймворк kaitai генерирует парсер. Поддерживаются языки Код: java 1.
Тоесть описатель почти полностью гетерогенный. Вчера с тогоже сайта стянул описание формата .elf и попробовал парсить свой каталог /usr но валят ошибки. Предполагаю что у меня 64х битная Linux, а образец elf.ksy исторически как демо пример был создан для 32х битных архитектур. Еще не разбирался. Я программирую на java, но будет демократичным дать форуму тоже возможность пощупать парсер. Поэтому я сделаю под csharp, python, cpp_stl тоже в качестве примера и приаттачу сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:06 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Зачем какие-то форматы, парсеры? Код, это просто byte[]. Ассемблер просто инструкцию в byte преобразовывает. Выделить память, заполнить кодом, поставить признак executable... запустить... словить GPF error ))) Скорее тут надо хорошая идея по работе с данными для алгоритмов. Т.к. заталкивание данных heap <--> native самое долгое и ресурсозатратное. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:09 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Я предвидел вопрос о JNI и взаимодействии java-heap - native. Я скажу так что нужно в ассемблер переносить не 1 инструкцию а целый алгоритм. С циклами. И с ощутимым временем отклика хотя бы в 1 порядок превышающим накладные на JNI. Осилит ли java-ист написание целого алгоритма на assembler - я не знаю. Этот вопрос - за кадром. Но я вобщем и не спрашиваю. Собственно тема интересна только тем разработчикам которые хотя-бы что-то в этом знают и ищут. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 16:16 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
По смыслу katiai очень напоминает Yacc/Bizon/Antlr с той разницей что изначально заточен на парсинг бинарных файлов а Яки и Бизоны - на тексты и исходники программ. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 17:19 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Код, это просто byte[]. Ассемблер просто инструкцию в byte преобразовывает. Выделить память, заполнить кодом, поставить признак executable... запустить... словить GPF error ))) Я здесь почти согласен. Но я хотел-бы чтоб java разработчик получил не JIT а конкретный артифакт. Физический файл. Который можно использовать в других проектах. Например в С++. Коньюнктурный интерес. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:03 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Хм.. тут какая-то ошибка. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Этот кейс ссылается на константу или Enum которого нет. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Я пока его хирургически выпилю. А потом разберусь. Что-б хоть компилляция прошла. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:25 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
По поводу 32-64 бит. Я ошибался. Все 99% моих локальных бинарей распарсились. Ну по крайней мере верхний уровень этого AST отработал норм. Изредка попадаются исключения но я думаю это minor. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:40 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Тулза. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:42 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
А теперь парсеры. Для крестов. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:48 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Для счастливых обладателей java ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:51 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Нужен С++ бинарь. Некий софистический пример чтоб его скомпилить. Потом прогнать через этот ElfReader а потом сравнить с тулами которые выдают дизассемблинг, дамп структур и прочее внутренние ресурсы. Возму для примера расчет дробей. Наименьшее кратное и так далее. Для простоты буду собирать не екзешник а либу. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:30 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Собираем как либу + экзешник чтоб просто проверить что все ОК. Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:32 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Тулзу я расширил. Теперь она выдает в текстовый файл кучу сведений с отступами. Типа чем правее отступ - тем внутренЕЕ лежит структура. Наподобие ЯМЛ. Чтоб читабельно было. Код: 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. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:34 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Модератор. Я был неправ и уже залез в C++/Java и ассемблер. Поэтому прошу мувнуть это в Программинг. Спс. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:35 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Вот что выдает этот парсер Эльфов при парсинге библиотечки libgcd-lcm.so Код: python 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:38 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
Вид бинаря с точки зрения дизассемблера. Код: plaintext 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:59 |
|
Пятничный ПОЦ.
|
|||
---|---|---|---|
#18+
А это вид с точки зрения readElf Код: plaintext 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245.
Модератор: Тема перенесена из форума "Java". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 01:02 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339711]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 173ms |
0 / 0 |