Các nhà phát triển V8 đã giới thiệu trình giải mã cho WebAssembly

Các nhà phát triển công cụ JavaScript V8 trình bày tính thiết thực dịch ngược wasm, cho phép bạn dịch ngược biểu diễn nhị phân trung gian lắp ráp web thành một ngôn ngữ giả có thể đọc được gợi nhớ đến JavaScript và C. Ngôn ngữ giả được đề xuất dễ hiểu hơn và phù hợp hơn cho việc phân tích cú pháp thủ công so với cách trình bày văn bản của WebAssembly ở định dạng “.wat”, gần với ngôn ngữ hợp ngữ hơn là các ngôn ngữ cấp cao. Trong trường hợp này, quá trình dịch ngược phản ánh sự biểu diễn Wasm một cách đầy đủ nhất có thể.

Trình dịch ngược Bật nó lên có trong bộ công cụ WABT, cung cấp bản dịch giữa các biểu diễn văn bản và nhị phân của WebAssugging, cũng như phân tích cú pháp, xử lý, sửa đổi và xác minh các tệp wasm. WABT cũng đang phát triển một tiện ích wasm2c, cho phép các tệp wasm được dịch ngược thành mã C tương đương có thể được biên dịch bởi trình biên dịch C, nhưng không khác nhiều về khả năng đọc so với cách biểu diễn văn bản của "wat".

Ví dụ: hàm C ban đầu được biên dịch trong wasm

typedef struct { float x, y, z; } vec3;

dấu chấm nổi(const vec3 *a, const vec3 *b) {
trả về a->x * b->x +
a->y * b->y +
a->z * b->z;
}

sẽ được dịch ngược bởi tiện ích wasm-decompile thành ngôn ngữ giả

hàm dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
trả về aa * ba + ab * bb + ac * bc
}

trong khi quá trình chuyển đổi sang định dạng văn bản ".wat" sẽ như thế này

(func $dot (loại 0) (param i32 i32) (kết quả f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.bù tải = 4
(local.get 0))
(f32.bù tải = 4
(local.get 1))))
(f32.mul
(f32.bù tải = 8
(local.get 0))
(f32.bù tải = 8
(local.get 1))))))

Nguồn: opennet.ru

Thêm một lời nhận xét