Je rencontre un problème lors de la conversion d'une fonction d'assemblage en ligne en fichier .asm. J'ai besoin d'un code assembleur en ligne séparé, car l'architecture x64 ne prend pas en charge l'assemblage en ligne. Voici le code,Comment convertir un assembleur inline en fichier .asm
#include <windows.h>
#include <string>
#include <iostream>
#include <tlhelp32.h>
using namespace std;
int filter(int code)
{
if (code == EXCEPTION_PRIV_INSTRUCTION)
{
return EXCEPTION_EXECUTE_HANDLER;
}
else
{
return EXCEPTION_CONTINUE_SEARCH;
}
}
bool IsInsideVMWare(void)
{
bool rc = true;
__try
{
__asm
{
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0 // any value but not the MAGIC VALUE
mov ecx, 10 // get VMWare version
mov edx, 'VX' // port number
in eax, dx // read port
// on return EAX returns the VERSION
cmp ebx, 'VMXh' // is it a reply from VMWare?
setz [rc] // set return value
pop ebx
pop ecx
pop edx
}
}
__except(GetExceptionCode())
{
rc = false;
}
return rc;
}
int main()
{
if(IsInsideVMWare())
cout << "You are in a VMware.." << endl;
else
cout << "You are in a native system.."<< endl;
system("PAUSE");
return 0;
}
Toute idée comment convertir et lien vers mon fichier cpp? Merci à partir de maintenant.
THK
Pourquoi l'assembleur en ligne est-il dans un bloc try? Assembler ne peut pas à travers des exceptions C++ et vous avez des problèmes plus importants si vous essayez d'attraper des exceptions de processeur non gérées. – doron
Pourquoi ne pas utiliser les fonctions C à la place? http://tldp.org/HOWTO/IO-Port-Programming-2.html – Fr0sT