Tôi đang cố gắng phát triển một ứng dụng phát hiện chương trình đang chạy bên trong máy ảo.Cửa sổ 64 bit Phát hiện VMware
Đối với Windows 32-bit, đã có phương pháp giải thích trong liên kết sau: http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
Tôi cố gắng để thích nghi với mã về Virtual PC và VMware phát hiện trong một hệ điều hành Windows 64-bit. Đối với VMware, mã có thể phát hiện thành công trong hệ điều hành Windows XP 64 bit. Nhưng chương trình bị treo khi tôi chạy nó trong một hệ thống bản địa (Windows 7 64-bit OS).
Tôi đặt mã trong tệp .asm và xác định bước xây dựng tùy chỉnh bằng tệp ml64.exe. Mã asm cho 64-bit Windows là:
IsInsideVM proc
push rdx
push rcx
push rbx
mov rax, 'VMXh'
mov rbx, 0 ; any value but not the MAGIC VALUE
mov rcx, 10 ; get VMWare version
mov rdx, 'VX' ; port number
in rax, dx ; read port
; on return EAX returns the VERSION
cmp rbx, 'VMXh'; is it a reply from VMWare?
setz al ; set return value
movzx rax,al
pop rbx
pop rcx
pop rdx
ret
IsInsideVM endp
tôi gọi phần này trong một file cpp như:
__try
{
returnValue = IsInsideVM();
}
__except(1)
{
returnValue = false;
}
Cảm ơn trước.
Vâng vâng, cố gắng truy cập các cổng phần cứng, một hoạt động đặc quyền, sẽ bẫy trong mã người dùng. Bạn cần phải nắm bắt ngoại lệ bằng SEH. Có vẻ như bạn đang cố gắng, nhưng bạn chưa hiển thị (1) tùy chọn trình biên dịch hoặc (2) theo dõi trình gỡ lỗi. –