在C ++中不能与ASM一起使用标记

时间:2018-10-19 15:46:37

标签: c++ assembly lnk2001

我需要一些帮助人员,我正在创建一些虚拟机,并且正在使用标记定义要保护的起点和要保护的终点。

例如,当我尝试执行此操作时,出现错误: 错误LNK2001:无法解析的外部符号

#pragma once
#pragma comment(lib, "../Release/libphant.lib")

extern "C" {
    void __stdcall BeginProtect(unsigned int);
    void __stdcall EndProtect(unsigned int);
}

//BeginProtect(0xb1f12057)
//EndProtect(0x5720f1b1);
#define BeginProtect __asm {\
    __asm push 0xb1f12057\
    __asm call BeginProtect\
}
#define EndProtect __asm {\
    __asm push 0x5720f1b1\
    __asm call EndProtect\
}

所以我得到: 未解析的外部符号“ _BeginProtect @ 4” 未解析的外部符号“ _EndProtect @ 4”

我在做什么? 我正在使用asm lib文件(如您所见) 我正在主文件中使用标记BeginProtect和EndProtect。

谢谢!

已更新: 部分来自asm

public BeginProtect as "_BeginProtect@4"
public EndProtect as "_EndProtect@4"

我要构建的主文件(仅作为示例):

#include "stdafx.h"
#include "phant.h"
#include <iostream>
#include <windows.h>




using namespace std;
int main() 
{
    BeginProtect;


    using std::cout;
    using std::endl;
    cout << "Hello, World!" << endl;



    EndProtect;

    return 0;
}

更新: 感谢大伙们!我解决了一个问题。都是关于.lib文件的。它有点损坏,我只是用FASM重新编译了它,并用VS构建了它。现在就可以了!

0 个答案:

没有答案