Tiền tố REX.W bị bỏ qua. Ở chế độ 64 bit, mã opcode FF /4
luôn có toán hạng 64 bit (JMP r/m64), do đó các tiền tố thay đổi kích thước toán hạng (REX.W, 66) không có hiệu lực.
Lý do tại sao tiền tố REX.W này hiện diện có thể phù hợp với quy tắc của hội nghị gọi điện thoại x64 của Microsoft về việc giải quyết. Lệnh nhập nhảy có hiệu quả là một hàm lệnh, và vì các ngoại lệ trên Windows là không đồng bộ, chúng có thể xảy ra bất cứ lúc nào, có thể có một ngoại lệ được tạo ra trong khi thực thi hàm này. Microsoft đặt một số restrictions on instructions used at the start and end of functions. Đặc biệt, hàm phải kết thúc bằng một phần kết thúc chỉ chứa một số hướng dẫn nhất định. Theo Kevin Frei's blog trên MSDN nếu hướng dẫn cuối cùng là một bước nhảy gián tiếp thì phải sử dụng tiền tố REX.W:
Một lưu ý khác: nếu jmp thức không phải là một jmp ip tương đối, nhưng một gián tiếp jmp, nó phải được bắt đầu bằng tiền tố REX, để chỉ ra cho hệ điều hành thư giãn thói quen mà nhảy được chuyển ra ngoài chức năng, nếu không, hệ điều hành giả định đó là một bước nhảy đến một vị trí khác trong cùng một hàm.
Các mâu thuẫn giữa việc sử dụng REX.W có thể đã xảy ra vì nguyên tắc này được mô tả ở trên là không hoàn toàn phù hợp với những gì tài liệu Microsoft chính thức đòi hỏi của một hướng dẫn JMP thức:
Chỉ có một tập hợp con của báo cáo jmp được cho phép trong epilog. Đây là độc quyền của lớp jmps với tham chiếu bộ nhớ ModRM nơi ModRM mod giá trị trường 00. Việc sử dụng jmps trong epilog với giá trị trường mod ModMM 01 hoặc 10 đều bị cấm.
Lưu ý rằng vì điều này sẽ loại trừ hướng dẫn JMP tương đối không sử dụng mã hóa ModR/M, loại JMP phổ biến nhất để kết thúc một hàm, vì vậy tôi tin rằng đó là tài liệu chính thức lỗi ở đây.
Lý do khác có thể cho sự không nhất quán là trình gỡ lỗi của Microsoft xử lý các bước nhảy nhập đặc biệt hoặc các bước nhảy không có tiền tố REX.W là lỗi và sẽ khiến chương trình bị chấm dứt trong trường hợp rất hiếm khi xảy ra trường hợp ngoại lệ xảy ra trong khi chúng đang được thực hiện.
Nguồn
2016-04-22 17:38:08
Tôi nghĩ bạn sẽ tìm thấy tài liệu đó trong tài liệu của Intel. –
Nó không được liệt kê trong sách hướng dẫn sử dụng và các bộ tháo rời mà tôi cũng không thể hiểu được. Tôi nghĩ 'rex.w' chỉ bị bỏ qua. – Jester