Ngân hàng câu hỏi của chương

Câu hỏi: IAM302 - Phần 4: Python và hợp ngữ x86

22 câu trắc nghiệm kèm lời giải của môn IAM302 - Phân tích mã độc và kỹ thuật dịch ngược, xếp theo thứ tự nhập vào ngân hàng. Trang 2/2 — câu 21–22.

Danh sách câu hỏi

22/22 câuHết danh sách
AFunctions don’t provide better modularity for your application
Byou can’t also create your own functions
CFunctions are reusable pieces of programs
DAll of the mentioned
Lời giải
Đáp án đúng: "Functions are reusable pieces of programs". Hàm (function) trong Python là một khối mã được đặt tên, định nghĩa bằng def, có thể gọi lại nhiều lần với tham số khác nhau; nhờ đó tránh lặp mã, chia chương trình thành phần nhỏ dễ đọc và dễ kiểm thử. "Functions don’t provide better modularity for your application" sai vì tăng tính mô-đun chính là một lợi ích lớn của hàm. "you can’t also create your own functions" sai vì ngoài hàm có sẵn như print hay len, người lập trình tự định nghĩa hàm bằng def hoặc lambda. "All of the mentioned" sai vì phát biểu về tính mô-đun và phát biểu về việc không tự tạo được hàm đều sai, chỉ phát biểu về tính tái sử dụng là đúng.
Mở trang câu hỏi này →
Ajz
Bamp
Cpush
Dpop
Ecall
Lời giải
Đáp án đúng: "call". Khi biên dịch, lời gọi printf với chuỗi định dạng và hai biến x, b trở thành một chuỗi lệnh: các tham số được push lên ngăn xếp theo thứ tự từ phải sang trái (b, rồi x, rồi địa chỉ chuỗi định dạng), sau đó lệnh call printf đẩy địa chỉ lệnh kế tiếp lên ngăn xếp làm địa chỉ trả về và nạp địa chỉ đầu hàm printf vào EIP; chính call làm EIP nhảy tới điểm vào của printf, và khi printf xong thì lệnh ret lấy lại địa chỉ trả về. Bác: "push" chỉ đưa tham số lên ngăn xếp và giảm ESP, EIP vẫn chạy tuần tự sang lệnh kế. "pop" lấy giá trị ra khỏi ngăn xếp, cũng không đổi luồng thực thi. "jz" là nhảy có điều kiện khi cờ ZF bằng 1, dùng cho rẽ nhánh if hay vòng lặp, không dùng để gọi hàm vì không lưu địa chỉ trả về. "amp" không phải lệnh hợp ngữ x86 nào, nên không thể chuyển EIP tới printf.
Mở trang câu hỏi này →