xem xét mã này lắp ráp x86:dereferencing một nhãn trong x86 lắp ráp
section .data
foo:
mov ebx, [boo]
mov [goo], ebx
goo:
mov eax, 2
mov eax, 3
ret
boo:
mov eax, 4
mov eax, 5
ret
gì chính xác là xảy ra ở đây? Khi tôi dereference [boo]
và mov
nó đến [goo]
chính xác thì tôi di chuyển ở đó? Chỉ một mệnh lệnh? Các ret
là tốt?
câu hỏi Follow-up:
- Liệu dereferencing một nhãn cho tôi một địa chỉ? Hoặc mã máy cho lệnh đầu tiên trong nhãn?
- Nếu đó là mã máy - làm cách nào có thể có nhiều hơn một lệnh? Không phải tất cả các lệnh cơ bản là 32-bit (ngay cả khi không phải tất cả các bit đều được sử dụng)?
- Tóm tắt - sẽ
eax
có giá trị 3 hoặc 5 ở cuối không?
Dường như điều này xảy ra để làm việc vì họ không đầy đủ 32-bit với số lượng và byte cuối cùng sẽ luôn là 0. Mã này sẽ thất bại nếu bạn thử một cái gì đó như mov, eax 0xC000000 – Michael
"lấy bốn byte" là những gì tôi đang tìm kiếm. cảm ơn! –