Ai đó có thể giải thích mã sau không?Lệnh lắp ráp x86 này làm gì (addsd xmm0, ds: __ xmm @ 41f00000000000000000000000000000 [edx * 8])?
addsd xmm0, ds:[email protected][edx*8]
Tôi nhận thấy rằng một số giá trị được thêm vào thanh ghi nổi xmm0, nhưng ý nghĩa của hằng số __xmm @ 41f00000000000000000000000000000 là gì? Có tài liệu nào mà tôi có thể đọc về nó không?
Dưới đây là đoạn đầy đủ các mã mà tôi đang cố gắng để hiểu:
cvtsi2sd xmm0, [ebp+var_2C8]
mov edx, [ebp+var_2C8]
shr edx, 1Fh
addsd xmm0, ds:[email protected][edx*8]
ebp + var_2C8 là giá trị số nguyên unsigned.
- ebp + var_2C8 được chuyển thành nổi và chuyển đến xmm0 đăng ký
- ebp + var_2C8 được chuyển đến edx và phải chuyển sang 31 bit
- một cái gì đó có nguồn gốc từ chuyển dịch này sẽ được thêm vào xmm0.
Chính xác những gì được thêm vào xmm0? Có mục đích nào có thể tính toán này?
Cập nhật.
Đây là tháo liệu cho mã này:
cvtsi2sd xmm0,dword ptr [ebp-2C8h]
mov edx,dword ptr [ebp-2C8h]
shr edx,1Fh
addsd xmm0,mmword ptr [edx*8+2685CC0h]
Hình như một số giá trị tăng gấp đôi từ mảng các hằng số được thêm vào xmm0 ...
Đó là bảng hoặc mảng tra cứu. Hằng số ngớ ngẩn chỉ là một sản phẩm của bộ tách rời của bạn (cũng có thể là một biểu tượng), xem xét việc tháo gỡ thô để xem địa chỉ thực tế. – Jester