Что такое Джаланги?
Фреймворк динамического анализа как для внешнего, так и для внутреннего JavaScript. Он позволяет вам отслеживать каждую операцию программы JavaScript, писать собственные анализы программ и инструменты, такие как линтеры, средства проверки стиля, оптимизация кэширования и т. д.
Он был создан Koushik Sen и Liang Gong в Беркли в 2013 году при поддержке Samsung Research America, которая хотела восполнить недостаток инструментов, которыми пользовались другие популярные языки, такие как C++ или Java [1].
Требования
- Node v12 (кажется, v18 хорошо работает для меня)
- Python 2.7 или выше и ниже 3.0, но нужен только для тестирования
Монтаж
Либо скачать из npm:
npm install jalangi2 cd node_modules/jalangi2
Или клонируйте репозиторий:
git clone https://github.com/Samsung/jalangi2 cd jalangi2
Чтобы проверить, все ли работает, запустите образец анализа со следующим (обратите внимание, что вы должны находиться в каталоге jalangi2/
):
node src/js/commands/jalangi.js --inlineSource --analysis src/js/sample_analyses/dlint/CheckNaN.js src/js/sample_analyses/dlint/Utils.jsIf everything went well this will have generated:
Если все прошло хорошо, это сгенерирует:
Utils_jalangi_.js
с инструментальным кодомUtils_jalangi_.json
с результатом анализа.
Как это работает
Он использует исходный код javascript для обеспечения уровня абстракции и простого API, что значительно упрощает реализацию сложных методов анализа.
API позволяет подключать обратные вызовы функций до и после почти каждого события или операции в вашем коде.
Наш собственный анализ
Вы можете найти каждую перехватываемую операцию в документах. Мы собираемся начать с перехвата вызовов console.log и изменения вывода.
- Создайте файл analysis.js
(function (sandbox) { J$.analysis = { invokeFunPre: function (iid, f, base, args) { args[0] = "You've been modyfied!"; if (f == console.log) { return { f: f, base: base, args: args }; } } }; })(J$);
2. Создайте файл sample.js для анализа
function annoyingLogger(msg) { console.log(msg); } annoyingLogger("Hello World");
3. Заходим в терминал и запускаем
node src/js/commands/jalangi.js --inlineSource --analysis <analysis.js filepath> <sample.js filepath>
И он должен выводить только You've been modyfied!
Секреты и уловки
Вы можете связать анализы с:
node src/js/commands/jalangi.js --inlineSource --analysis src/js/sample_analyses/ChainedAnalyses.js --analysis <analysis 1 filepath> --analysis <analysis 2 filepath> <target file>
Для расположения кода включите флаг --inlineIID
и используйте:
var iidToLocation = sandbox.iidToLocation; var codeLine = iidToLocation(getGlobalIID(iid)).split(":")[2];
Если вы хотите узнать о более сложных анализах, используйте их онлайн-песочницу.
Рекомендации
- Обложка со слайдов проф. Майкл Прадель
- [1]К. Сен, С. Каласапур, Т. Брутч и С. Гиббс, дои
Первоначально опубликовано на https://dev.to 10 ноября 2022 г.