Шутко

Nov. 29th, 2006 12:52 am
kincajou: (колбаса)
[personal profile] kincajou
Вставка байткода в исходник на жаве. Ну, типа, для оптимизации.
(deleted comment)

Date: 2006-11-28 10:40 pm (UTC)
From: [identity profile] kincajou.livejournal.com
или javassembler

страшная штука должна быть...

Date: 2006-11-29 11:17 pm (UTC)
From: [identity profile] joppux.livejournal.com
Называется AspectJ. Правда, не для оптимизации.

Date: 2006-11-30 06:09 pm (UTC)
From: [identity profile] kincajou.livejournal.com
то есть такое есть ина самом деле? а для чего?

Date: 2006-11-30 08:38 pm (UTC)
From: [identity profile] joppux.livejournal.com
Не, это я не по теме на самом деле сказал. Хотя Java-ассемблеры действительно есть, но оптимизации это почти не дает - ведь там чисто стековая машина, никаких регистров, все оптимизации практически на уровне исходного языка.
AspectJ позволяет модифицировать классы по определенным шаблонам, вставляя в нужных местах байт-код. Простой пример - трассировка методов - вставляем код печати во все методы.

Date: 2006-12-02 12:47 pm (UTC)
From: [identity profile] kincajou.livejournal.com
то есть это для "патчения по-живому"?

Date: 2006-12-02 02:02 pm (UTC)
From: [identity profile] joppux.livejournal.com
Смотря что считать по-живому :)
Обычно это еще один этап компиляции - обработка готовых class-файлов. Хотя никто не запрещает это делать в рантайме.

Date: 2006-12-01 10:07 am (UTC)
From: [identity profile] mc6312.livejournal.com
Вспомнились программы для "Спектрума", где куски машинного кода были запихнуты вместо текста после REM

Date: 2006-12-02 12:49 pm (UTC)
From: [identity profile] kincajou.livejournal.com
и не только для Спектрума. Пример из не такого уж и далёкого прошлого, программа одного моего знакомого для курсового проекта:

"Программа написана на Паскале. Исходный код:
procedure DoSomething (....)
begin
asm
.....
end;
"


Вот как-то так

Date: 2006-12-04 06:51 am (UTC)
From: [identity profile] mc6312.livejournal.com
Э... это просто ассемблерная вставка в исходнике. А там исполняемый машинный код был. Причем хитровывернутый, для выполнения по любому адресу (у Спектрума адрес начала бейсиковской программы "плавающий" был).

Date: 2006-12-04 11:26 am (UTC)
From: [identity profile] kincajou.livejournal.com
интересно, как это можно машинный код сразу перемещаемым написать? Какой-то хитрый загрузчик?

Я знаю разницу между асмом и машкодами - просто забавно было: программа "написана на паскале", а внутри один сплошной асм.

Date: 2006-12-04 02:14 pm (UTC)
From: [identity profile] mc6312.livejournal.com
В такие "гибриды" обычно как раз и пихали загрузчики, для более крупных блоков.
На спектруме бейсиковская программа хранилась не в виде текста. Два байта (слово) на номер строки (из-за чего можно было делать строки с одинаковыми номерами), два байта на длину строки, и далее сама строка. Операторы хранились не в текстовом виде, а как однобайтовые коды. После оператора REM мог быть совершенно любой текст, в т.ч. содержащий управляющие коды (цвет/положение на экране), соответственно вместо них можно было запихать и машинный код.
Выглядело это примерно так:

0 REM ...здесь код...
1 RANDOMIZE USR PEEK 23635+256*PEEK 23636+N


где 23635 - адрес системной переменной, где хранится адрес начала бейсиковской программы, и N - смещение содержимого REM от первого байта номера строки.
Часто после REM шли управляющие коды и текст, маскирующие программу при просмотре листинга.

Сам код - определял собственный адрес либо через ту же переменную, либо другими способами.

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
25 262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 26th, 2025 09:04 pm
Powered by Dreamwidth Studios