Не могу использовать маркеры с ASM в C ++ - PullRequest
0 голосов
/ 19 октября 2018

Мне нужна помощь, ребята, я создаю виртуальную машину и использую маркеры, чтобы определить начальную точку защиты и конечную точку защиты.

Так, например, когда я пытаюсь сделать это, я получаю ошибку: ошибка 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.и теперь работает нормально!

...