Disassembling Python Byte Code

krone

VIP Members
26/07/2016
141
259 bài viết
Disassembling Python Byte Code
Nhân tiện trong challenge WhiteHat Grand Prix vừa qua, mình thấy có một bài liên quan đến Disassembling Pythong Byte Code nên mình viết một bài về ACM/Programming cho các bạn tham khảo để biết thêm về "Disassembling Python Byte Code". Task cụ thể trong Grandprix đó là "Pyc" và writeup cho bai này cũng được một số team explain, mình xin dẫn link một write up mà mình tìm được:

https://bl4ckbull3t.blogspot.com/2017/12/writeup-pyc-sau-khi-nhan-uoc-file-minh.html

Okey, vậy Disassembling Python Byte Code là gì ?
Bạn muốn biết chi tiết những gì mã của bạn đang làm? Bằng cách phân tích nó vào mã byte cấp thấp được sử dụng bởi thông dịch viên.
Module "dis" được sử dụng để xuất ra bất kì một hàm nào của Python. Ví dụ:

upload_2017-12-27_16-36-42.png

upload_2017-12-27_16-37-29.png


"dis" module thực sự hữu ích nếu bạn muốn nghiên cứu điều gì thực sự đang diễn ra khi chương trình của bạn thực thi ở level rất thấp.(Ví dụ: bạn đang muốn tìm hiểu về hiệu suất hoạt động của chương trình).
Mã byte được giải thích bởi hàm "dis()" có sẵn trên các hàm như sau:

upload_2017-12-27_16-42-27.png


Nếu muốn giải thích được đoạn code này cho chính bạn, bạn cần sử dụng một số hằng số được định nghĩa trong module "opcode". Ví dụ:

upload_2017-12-27_16-46-31.png


Có một điều đáng buồn là module này không hề có chức năng để biễu diễn bytecode theo cách trông giống như là programming. Tuy nhiên chức năng "generator" sẽ lấy chuỗi mã bytecode và biến nó thành opcodes và các đối số.

upload_2017-12-27_17-2-17.png

upload_2017-12-27_17-2-58.png


Và output

upload_2017-12-27_17-3-58.png


Trên đây là một ví dụ thực tế về bytecode Python :D. Hy vọng các bạn có thể hiểu rõ hơn về thể loại này một chút, sau này gặp các bài như này cũng không bỡ ngỡ. Ứng dụng của Bytecode mình sẽ viết thêm một bài khác.
 
Thẻ
bytecode disassembly grandprix 2017 pyc python whitehat whitehat grandprix
Bên trên