我在将内联汇编程序函数转换为.asm文件时遇到问题。我需要单独的内联汇编代码,因为在x64架构中不支持内联汇编。 这是代码,
#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;
}
知道如何转换和链接到我的cpp文件? 谢谢你们。
T H K
答案 0 :(得分:0)
可能你最好的办法是将内联汇编程序列入单独的C源文件中的单独函数,然后将新的源文件编译成汇编程序(记住在头文件中你需要使用extern "C" { ... }
)。然后,您可以获取汇编器输出并将其修改为64位。
在生成的汇编程序文件中,您会发现有用于将符号添加到重定位表的汇编程序指令。您还将看到创建和清除堆栈所需的代码。这将根据调用约定而有所不同。如果没有关于您打算使用的汇编程序的更多详细信息,我无法提供更多详细信息。
答案 1 :(得分:0)
我认为链接器不会接受将32位代码与64位代码链接在一起。