СообЧа > База Знаний > Программирование > Delphi

Вопрос

Как определить что программа запущена в эмуляторе в Virtual PC?

Ответ

Эта функция может быть использована для определения, что ваша программа запущена в Connectrix's Virtual PC

function running_inside_vpc: boolean; assembler;
asm
    push ebp

    mov ecx, offset @@exception_handler
    mov ebp, esp

    push ebx
    push ecx
    push dword ptr fs:[0]
    mov dword ptr fs:[0], esp

    mov ebx, 0 // флаг
    mov eax, 1 // номер функции VPC

    // call VPC
    db 00Fh, 03Fh, 007h, 00Bh

    mov eax, dword ptr ss:[esp]
    mov dword ptr fs:[0], eax
    add esp, 8

    test ebx, ebx
    setz al
    lea esp, dword ptr ss:[ebp-4]
    mov ebx, dword ptr ss:[esp]
    mov ebp, dword ptr ss:[esp+4]
    add esp, 8
    jmp @@ret
    @@exception_handler:
    mov ecx, [esp+0Ch]
mov dword ptr [ecx+0A4h], -1 // EBX = -1 -> не запущен, ebx = 0 -> запущен
    add dword ptr [ecx+0B8h], 4
    xor eax, eax
    ret
    @@ret:
end;

Из конференции Delphi



Copyright © 2000-2004 Сообщество Чайников
Контактная информация