2012-10-13 26 views
6

thể trùng lặp:
What’s the purpose of the LEA instruction?
LEA instruction?rắc rối hiểu lắp ráp lệnh "địa chỉ hiệu quả tải"

Vì vậy, tôi đang làm việc trên sự phân công bom nhị phân cho lớp (nó có một bó các giai đoạn mà bạn phải bước qua mã lắp ráp của chương trình và tìm cụm từ mật khẩu để giải mã "bom").

Tôi không thể hoàn tất giai đoạn hiện tại của mình vì tôi không hiểu lệnh lea. Tôi đã đọc rằng nó thường được sử dụng cho số học, nhưng tôi chỉ không hiểu nó như thế nào.

Lệnh Tôi nhìn vào đặc biệt là

lea -0x18(%ebp), %ebx 
lea -0x8(%ebp), %esi 

theo sau là một

mov -0x4 (%ebx), %eax 
add -0x8(%ebx), %eax 

trong dòng eax tiếp theo và ebx được so sánh, nếu họ bằng chương trình tiếp tục, nếu quả bom nổ tung.

Tôi đã tìm hiểu đủ về giai đoạn này để biết nó muốn 6 số, hai số đầu tiên là 0 và 1. Sau đó, thực hiện một số thao tác để xác định xem phần còn lại của chuỗi có đúng không (tôi giả sử lệnh lea là những gì tôi cần giải mã để tìm các số tiếp theo).

Bây giờ những gì tôi không thể tìm thấy là những gì -0x18 nói riêng. dấu âm là gì? nó chỉ ra phép trừ? là nó tìm kiếm 18 byte trước khi ebp?

Cảm ơn bạn đã được trợ giúp tại đây.

Trả lời

14

Lệnh LEA tính một địa chỉ bộ nhớ bằng cách sử dụng số học tương tự mà một hướng dẫn sử dụng MOV. Nhưng không giống như lệnh MOV, lệnh LEA chỉ lưu trữ địa chỉ được tính toán trong thanh ghi đích, thay vì tải nội dung của địa chỉ đó và lưu trữ nó.

xem xét hướng dẫn LEA đầu tiên của bạn:

lea -0x18(%ebp), %ebx 

hướng dẫn này tính tổng của -0x18 và giá trị trong thanh ghi EBP. Nó nhận được một số kết quả S. Nó lưu trữ S trong thanh ghi EBX.

Trong phần bổ sung -0x18, dấu "-" là dấu âm và "0x" nghĩa là hằng số thập lục phân. Vì vậy, phụ lục là âm 18 , là -24 . Vì vậy, hướng dẫn LEA này đơn giản trừ 24 từ giá trị trong EBP và lưu trữ kết quả trong EBX.

Contrast này với hướng dẫn MOV của bạn:

mov -0x4(%ebx), %eax 

hướng dẫn này tính tổng của -0x4 và giá trị trong thanh ghi EBX. Nó nhận được một số kết quả S. Sau đó, nó lấy giá trị của từ tại địa chỉ S trong bộ nhớ, nhận được một số giá trị M. Nó lưu trữ M trong thanh ghi EAX.

1

Hướng dẫn LEA tải địa chỉ sẽ được đánh giá bằng chế độ địa chỉ cụ thể vào thanh ghi đích. Hãy xem xét hai trường hợp sau:

lea -0x18(%ebp), %ebx 
mov -0x18(%ebp), %ebx 

Hướng dẫn đầu tiên tải địa chỉ được tính là offset -0x18 tương ứng với giá trị hiện tại của ebp vào ebx. Lệnh thứ hai tải nội dung bộ nhớ tại địa chỉ này vào ebx.

Giá trị chênh lệch âm có nghĩa là vị trí nằm bên dưới địa chỉ trong thanh ghi và chênh lệch dương nghĩa là vị trí nằm phía trên địa chỉ trong sổ đăng ký. Nó được phổ biến để đại diện cho một ký ức với địa chỉ zero ở phía dưới và các địa chỉ phát triển theo hướng hàng đầu trong các bản vẽ:

0xFFFFFFFC !_______! 
    .... 
+0x4(ebp) -> !_______! 
(ebp) ->  !_______! 
-0x4(ebp) -> !_______! 
    .... 
0x00000000 !_______! 
Các vấn đề liên quan