#include "Windows.h"
bool checkdbg() {
__asm {
call IsDebuggerPresent //gọi api debug
test eax, eax
jne L1
mov i,0
L1 :
}
if(i == 0) return false;
else return true;
}
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
checkdbg();
return ERROR_SUCCESS;
}
Это скомпилируется просто отлично. Это, вероятно, жалуется, потому что вы пропустили точку входа. Подсистема, указанная вами в параметрах проекта, указывает, какое из основных требуется, будь то WinMain (для подсистемы Windows) или main (для подсистемы консоли).
Также я бы посоветовал использовать:
#include <Windows.h>
В отличие от:
#include "Windows.h"
См. здесь для объяснения. Также вы должны просто сделать это:
#include <Windows.h>
BOOL checkdbg() {
int i = 1;
__asm{
call IsDebuggerPresent
ret
}
}
int main() {
checkdbg();
return ERROR_SUCCESS;
}
В любом случае ожидается возврат в eax, так что вы также можете вернуться, в противном случае все, что вы делаете, проверяет, является ли возвращение истинным, а затем возвращает истинное. Если это false, верните false. Просто вернись. Единственное, что вы сделали, так это эффективно бросили из BOOL в bool. Хотя, в любом случае, лучше, чем вы используете встроенный ASM для этого.