Tôi định sử dụng Qemu để tạo ra một dấu vết bộ nhớ để thực thi hệ điều hành khách x86.hoạt động bộ nhớ qemu
Theo trang wiki tcg, Qemu sử dụng một số ít người trợ giúp để tạo tải/lưu trữ cho bộ nhớ đích (khách). Danh sách hướng dẫn này là tcg_gen_qemu_ld8s/u
, tcg_gen_qemu_ld16s/u
, tcg_gen_qemu_ld32s/u
, tcg_gen_qemu_ld64
. (Chúng tôi có một bộ tương tự cho hướng dẫn cửa hàng). Tôi bẫy tất cả các cuộc gọi đến các chức năng trên trong mục tiêu-i386/translate.c tập tin
Tuy nhiên, tôi vẫn còn thiếu tải/cửa hàng của hướng dẫn nhất định như
cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0
Câu hỏi:
- Ai đó có thể vui lòng trỏ đến các điểm tải/lưu trữ khác (trực tiếp hoặc gián tiếp) mà tôi bị thiếu?
- Qemu có cung cấp một chức năng điểm vào duy nhất để truy cập vào bộ nhớ khách (như
guest_read()
) có thể được thiết bị để truy tìm tất cả các tải từ bộ nhớ khách ??? - Ai đó có thể xin vui lòng trỏ đến một tài liệu tốt, nơi tôi có thể hiểu làm thế nào qemu duy trì trạng thái của bộ nhớ khách ??
Xin lỗi bạn bè vì hướng dẫn gây hiểu lầm trong thư trước đó.
cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0
Dường như tất cả các hướng dẫn ở trên đều được trang trải với người trợ giúp tcg_gen_ld/st
.
Nhưng bây giờ tôi đã tình cờ gặp một vấn đề khác:
Ban đầu tôi nghĩ rằng tất cả các tương tác với bộ nhớ khách xảy ra thông qua các hướng dẫn trợ giúp trong tệp translate.c. Tuy nhiên, tôi thấy rằng các hàm trợ giúp cho một số hướng dẫn như cmpxcgh8b
và cmpxchg16b
thực sự đang truy cập bộ nhớ khách.
Vì vậy, điều đó có nghĩa là có nhiều điểm nhập để đọc bộ nhớ khách. Có thể một số người vui lòng giải thích các lệnh ldq và stq được dịch như thế nào để truy cập bộ nhớ khách ??