2010-04-02 40 views
6

Tôi đã đọc qua this question và tự hỏi nếu câu trả lời được chấp nhận cũng có thể là một cách để xác định kiến ​​trúc. Ví dụ, trong asm tôi có thể đẩy một WORD lên stack và sau đó kiểm tra SP. Hãy so sánh các SP mới cho SP cũ:Xác định cấu trúc 32/64 bit trong assembly

Diff 4 có nghĩa là 32 bit
Diff 8 có nghĩa là 64 bit

Tôi thích hợp trong suy nghĩ này?

+2

Tôi đã có ấn tượng rằng các hướng dẫn lắp ráp 32 bit và 64 bit khác nhau. Ít nhất trong x86 so với x86-64. – Powerlord

+2

Tôi không biết, nhưng nếu bạn chỉ muốn phát hiện hỗ trợ 64 bit, bạn có thể sử dụng lệnh CPUID. –

+1

Thông thường nó được biết tại thời gian biên dịch cho dù mục tiêu là 64 bit hay 32 bit. Nó sẽ là một trường hợp hiếm hoi thực sự rằng thủ thuật này sẽ hữu ích. Ngoài ra, tôi đoán là có một cách để kiểm tra cờ liên quan trực tiếp mà không cần phải làm một số loại lừa như thế này. –

Trả lời

6

Không, vì kích thước ngăn xếp của bạn dựa trên chế độ bạn đang chạy (thực, được bảo vệ, dài/64, vm86, smm, v.v.), không phải trên kiến ​​trúc. Nếu lắp ráp của bạn đang chạy trong chế độ bảo vệ ví dụ, ngăn xếp của bạn sẽ là 32 bit (hoặc 16 nếu toán hạng của bạn là 16 bit), ngay cả khi bộ vi xử lý của bạn là x86-64.

Giống như một người nào đó trong các nhận xét được đề cập, CPUID là cách đáng tin cậy duy nhất để cho biết kiến ​​trúc của bạn là gì.

+0

Được rồi ... có ý nghĩa. – IAbstract

Các vấn đề liên quan