Làm phẳng luồng điều khiển
controlFlowFlattening
~1.5x slower
Biến đổi cấu trúc mã để che giấu luồng chương trình gốc. Khiến việc phân tích thủ công khó hơn nhiều bằng cách chuyển mã tuyến tính thành một máy trạng thái với câu lệnh switch.
// Before
function process() {
step1();
step2();
step3();
}
// After (flattened)
function process() {
var state = '0|1|2'.split('|'), i = 0;
while (true) {
switch (state[i++]) {
case '0': step1(); continue;
case '1': step2(); continue;
case '2': step3(); continue;
}
break;
}
}
Làm phẳng luồng điều khiển kết hợp tốt với các tùy chọn cơ bản khác và với làm rối VM - máy trạng thái đã được làm phẳng sẽ tiếp tục được biến đổi thành bytecode khi bật VM.
