2012-05-08 23 views

Trả lời

16

NOP của nó. Nó thêm nội dung của% esi và 0x0, và đặt kết quả bằng% esi. Ai đó hoặc có một máy phát mã vụng về hoặc cần điền N byte, nơi lệnh này có kích thước phù hợp.

Hướng dẫn LEA thực thi khá nhanh (thường là 1 đồng hồ), vì vậy điều này tốt hơn rất nhiều so với N nops.

x86 là kỳ quặc như vậy, có nhiều hướng dẫn có hiệu quả không làm bất cứ điều gì nhưng điền số lượng byte khác nhau. Bạn có thể tìm thấy các hướng dẫn vô dụng khác có độ dài khác nhau. Bạn có xu hướng tìm hướng dẫn dài nhưng thực thi trong 1 đồng hồ trở xuống.

Sách hướng dẫn AMD x86-64 có một số gợi ý về những gì nên được sử dụng cho NOP; họ đề nghị một trong các opcodes tiền tố lặp lại nhiều lần trước NOP thực, IIRC. Các opcodes tiền tố như vậy được tiêu thụ rất nhanh chóng bởi công cụ tìm nạp lệnh; chủ yếu là chi phí của họ được ẩn trong hướng dẫn tìm nạp trước, và không phải trong thời gian thực hiện lệnh.

+1

Sau đó, trừ khi GCC là một trình tạo mã vụng về. Cảm ơn đã phản ứng nhanh chóng. – Brian

+3

Điểm thú vị là 'lea 0x0 (% esi),% esi' chỉ là một no-op trong mã 32 bit. Trong mã 64 bit, lệnh này bổ sung thêm từ kép cao hơn '% rsi'. Cho đến nay tôi đã thấy GCC chèn các chỉ dẫn như vậy chỉ trong mã 32-bit mặc dù. – Eugene

+3

.... do đó, điểm của "đề nghị multibyte NOP" của AMD. –