Конференция с международным составом докладчиков — тоже международная.
99% не русскоязычных посетителей отвалятся на этапе «Ой, а туда виза нужна? Лучше на JUG в соседний город съезжу».
Ну и птичка у вас слишком разжирела. Joker Personal early bird — 14 000, JPoint Personal early bird — 20 000.
Кормите её поменьше, избыточный вес вреден для здоровья.
В прошлый раз на JPoint у нас на выставке было 10 стендов: Сбербанк-Технологии, Одноклассники, JetBrains, GridGain, Альфа-Лаборатория и многие другие.
Не припоминаю стенда JetBrains на прошлогоднем JPoint, он точно был?
Передача семпла происходила простым перетаскиванием исполняемого файла в целевую машину (drag’n’drop), после чего, в зависимости от типа файла, производился запуск. Либо двойным кликом, либо через консоль.
Куда в этом случае инжектился Traps?
Ведь при запуске создаётся новый процесс, в список процессов для проверки не входящий.
Второй вопрос: Сможет ли это решение обнаружить зловреда, написанного на Java?
Исходим из предположения, что пользователь его зачем-то запустил и инжект Traps в java.exe разрешён.
Данные инструкции разнесены для того, чтобы находиться в разных try-блоках. Почему сделано именно так, я не знаю. Вероятно, это был единственный способ обрабатывать исключения так, чтобы они полностью соответствовали спецификации языка.
Если посмотреть на реализациюMethodAccessorGenerator, то будет видно, что generateMethod() и generateConstructor() — обёртки над методом generate() и генерируемые классы отличаются лишь в деталях.
Вот, к примеру, как будет выглядеть класс для доступа к PrintStream::println(String):
package sun.reflect;
import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
public class GeneratedMethodAccessor1 extends MethodAccessorImpl {
public Object invoke(Object var1, Object[] var2) throws InvocationTargetException {
if (var1 == null) {
throw new NullPointerException();
} else {
PrintStream var10000;
String var10001;
try {
var10000 = (PrintStream)var1;
if (var2.length != 1) {
throw new IllegalArgumentException();
}
var10001 = (String)var2[0];
} catch (NullPointerException | ClassCastException var4) {
throw new IllegalArgumentException(var4.toString());
}
try {
var10000.println(var10001);
return null;
} catch (Throwable var3) {
throw new InvocationTargetException(var3);
}
}
}
}
Здесь видно, что в блоке catch (NullPointerException | ClassCastException) делается проверка того, что метод вызывается на объекте подходящего типа, в метод передаётся ровно столько параметров, сколько нужно и они верных типов.
Если в этом блоке что-то пойдёт не так, то наружу будет проброшено IllegalArgumentException.
В блоке catch (Throwable) производится уже непосредственный вызов метода и если в процессе его работы будет сгенерирована исключительная ситуация, то она будет обёрнута в InvocationTargetException и так же проброшена наружу.
Единственное отличие при вызове конструктора, а не метода ровно одно — в самом начале catch (NullPointerException | ClassCastException) добавляется инструкция new, а в качестве вызываемого метода выступит <init> (конструктор).
Другими словами, метод invoke() сгенерированного класса ведёт себя аналогично методам java.lang.reflect.Method::invoke() и java.lang.reflect.Constructor::invoke().
Вы искали инструкцию по забиванию гвоздей микроскопом, чтобы меньше пользоваться для этого молотком. Но при всём вашем усердии вам не удалось сколотить ни одной табуретки без молотка.
Это замечательно, я считаю. Так и должно быть.
у меня нет способности зазубривать большие объемы текста. А в вузе много предметов, которые так сдаются.
Например?
Ну и «нет способности» в данном случае это ни что иное, как «мне лень».
Вот побить мировой рекорд в беге на 100 метров способности действительно может и не быть.
К примеру, мне. И, судя по остальным комментариям, не мне одному.
Если читалки с e-Ink ещё могут составить хоть какую-то конкуренцию по удобству бумажной книге, то устройства со светоизлучающими экранами тут совершенно неконкурентоспособны.
Удобно таскать с собой кирпич из бумаги?
Мы же про «здорового» человека говорим?
Никто дополнительные грамм триста в сумке/рюкзаке даже и не заметит.
А в случае со стоящей на полке на работе/дома книге вес и вовсе роли не играет.
Или поиск в технической литературе — это зло?
Это уже какие-то неумелые попытки демагогии с вашей стороны пошли.
Про поиск я не писал вообще ничего — раз. Ничто не мешает помимо бумажной копии иметь и электронную — два.
Абсолютно любая книга, начиная с худлита и заканчивая 400-страничной спецификацией формата файла. Если что-то нужно прочитать, то читать это удобнее в виде бумажной копии.
Такое правда бывает? Я шокирован.
А что они в отзывах пишут?
99% не русскоязычных посетителей отвалятся на этапе «Ой, а туда виза нужна? Лучше на JUG в соседний город съезжу».
Не многовато ли англоязычных докладчиков?
Ну и птичка у вас слишком разжирела. Joker Personal early bird — 14 000, JPoint Personal early bird — 20 000.
Кормите её поменьше, избыточный вес вреден для здоровья.
Не припоминаю стенда JetBrains на прошлогоднем JPoint, он точно был?
Два стола, полный контроль и при этом, судя по КДПВ, ни одного нормального монитора с большим экраном нет.
Как это соотносится с
Куда в этом случае инжектился Traps?
Ведь при запуске создаётся новый процесс, в список процессов для проверки не входящий.
Второй вопрос: Сможет ли это решение обнаружить зловреда, написанного на Java?
Исходим из предположения, что пользователь его зачем-то запустил и инжект Traps в java.exe разрешён.
Вот, к примеру: https://www.pcworld.com/article/3031736/security/java-based-trojan-was-used-to-attack-over-400000-systems.html
Люди в основном выступлением на свадьбах зарабатывают, репертуар соответствующий.
Если посмотреть на реализацию
MethodAccessorGenerator, то будет видно, чтоgenerateMethod()иgenerateConstructor()— обёртки над методомgenerate()и генерируемые классы отличаются лишь в деталях.Вот, к примеру, как будет выглядеть класс для доступа к
PrintStream::println(String):Здесь видно, что в блоке
catch (NullPointerException | ClassCastException)делается проверка того, что метод вызывается на объекте подходящего типа, в метод передаётся ровно столько параметров, сколько нужно и они верных типов.Если в этом блоке что-то пойдёт не так, то наружу будет проброшено
IllegalArgumentException.В блоке
catch (Throwable)производится уже непосредственный вызов метода и если в процессе его работы будет сгенерирована исключительная ситуация, то она будет обёрнута вInvocationTargetExceptionи так же проброшена наружу.Единственное отличие при вызове конструктора, а не метода ровно одно — в самом начале
catch (NullPointerException | ClassCastException)добавляется инструкцияnew, а в качестве вызываемого метода выступит<init>(конструктор).Другими словами, метод
invoke()сгенерированного класса ведёт себя аналогично методамjava.lang.reflect.Method::invoke()иjava.lang.reflect.Constructor::invoke().Недавно была статья про большие графы применительно к картам, там есть и глава про отрисовку: https://habrahabr.ru/post/338440/
Это замечательно, я считаю. Так и должно быть.
Нужно так: «Шок! Intel называет G золотом!»
Очевидно же, что полное соответствие слов может быть только в близкородственных языках.
Английский — понятно, а какие ещё?
Ну и «нет способности» в данном случае это ни что иное, как «мне лень».
Вот побить мировой рекорд в беге на 100 метров способности действительно может и не быть.
К примеру, мне. И, судя по остальным комментариям, не мне одному.
Если читалки с e-Ink ещё могут составить хоть какую-то конкуренцию по удобству бумажной книге, то устройства со светоизлучающими экранами тут совершенно неконкурентоспособны.
Мы же про «здорового» человека говорим?
Никто дополнительные грамм триста в сумке/рюкзаке даже и не заметит.
А в случае со стоящей на полке на работе/дома книге вес и вовсе роли не играет.
Это уже какие-то неумелые попытки демагогии с вашей стороны пошли.
Про поиск я не писал вообще ничего — раз. Ничто не мешает помимо бумажной копии иметь и электронную — два.