Tôi đang cố gắng tìm hiểu thêm về lắp ráp và tháo gỡ. Mục tiêu của tôi là sửa đổi cách một địa chỉ cụ thể được viết bằng trình gỡ lỗi (olly). Tốt hơn là bằng cách tăng nó bằng một số (20, 50, vv ..), tôi có thể xác định địa chỉ của số dấu phẩy động (trong trường hợp này là 33B7420C
).FSTP DWORD PTR DS: [ESI + 1224] làm gì?
Khi tôi đặt một breakpoint trên truy cập bộ nhớ viết nó mang lại cho tôi để 00809B2E
trong đó có việc lắp ráp sau:
FSTP DWORD PTR DS:[ESI+1224]
gì chính xác là nó làm ở địa chỉ này? Tôi biết rằng thanh ghi FPU có số tôi đang tìm kiếm nhưng không chắc chắn tất cả các địa chỉ này đang làm gì.
Gần nhất tôi đến googling là: What does MOV EAX, DWORD PTR DS:[ESI] mean and what does it do?
Một bản sao của các thanh ghi cho thấy như sau:
EAX 00000000
ECX 00A16E40 EZ.00A16E40
EDX FFFFFFFF
EBX 33B74578
ESP 0018FA90
EBP 00000000
ESI 33B72FE8
EDI 33B74578
EIP 00809B2E <EZ.Breakpoint for time>
C 0 ES 002B 32bit 0(FFFFFFFF)
P 0 CS 0023 32bit 0(FFFFFFFF)
A 0 SS 002B 32bit 0(FFFFFFFF)
Z 0 DS 002B 32bit 0(FFFFFFFF)
S 0 FS 0053 32bit 7EFDD000(FFF)
T 0 GS 002B 32bit 0(FFFFFFFF)
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00210202 (NO,NB,NE,A,NS,PO,GE,G)
ST0 valid 1150.0000000000000000
ST1 zero 0.0
ST2 zero 0.0
ST3 empty 64.951911926269531250
ST4 empty -13.250000000000000000
ST5 empty 64.951911926269531250
ST6 empty 64.951911926269531250
ST7 empty 0.0239995196461677551
3 2 1 0 E S P U O Z D I
FST 2927 Cond 0 0 0 1 Err 0 0 1 0 0 1 1 1 (LT)
FCW 027F Prec NEAR,53 Mask 1 1 1 1 1 1
Bất kỳ trợ giúp sẽ được đánh giá cao, Cảm ơn bạn!
Bạn sẽ nhận được một bản sao của tài liệu tham khảo lắp ráp x86 cho lời giải thích của các hướng dẫn cụ thể. Yêu cầu SO mỗi khi bạn gặp một lệnh không mở rộng tốt. –