在Windows中使用Visual Studio 2013 C ++编写解决方案,并尝试使_penter和_pexit挂钩正常工作。
使用/ Gh和/ GH编译时,获取我所有项目文件的error LNK2001: unresolved external symbol _pexit
和error LNK2001: unresolved external symbol _penter
。我有两个项目的解决方案-一个我的主项目是用/ GH和/ Gh编译的,另一个是在装配文件中定义_penter
和_pexit
的DLL项目(自从我写了一个单独的装配文件以来,应用是x64)。
如果我有另一个符号(DLL中的另一个函数),可以看到它,并且我可以从另一个项目中调用它,并且它可以按预期正常工作,但是当我使用/ GH和/ Gh选项进行编译时找不到_penter
和_pexit
的定义。找不到原因。
此外,如果我尝试将_penter
和_pexit
写入cpp文件本身,则它会暴露出来,其他项目也可以看到它。但是我不能用x64编写内联程序集,所以我已经将它写在一个单独的asm文件中,但是没有暴露出来。
此外,我尝试按如下方式编写def
文件,
LIBRARY EXTLIB
EXPORTS _penter
EXPORTS _pexit
将我的主要项目指向它,它给了我这两个错误,
1>------ Build started: Project: MyProj, Configuration: Release x64 ------
1>Definitions.def : error LNK2001: unresolved external symbol _penter
1>Definitions.def : error LNK2001: unresolved external symbol _pexit
1>..\..\build\MyProj.lib : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========
当我不提供def文件时,错误就像
1>Reality.obj : error LNK2001: unresolved external symbol _pexit
1>Reality.obj : error LNK2001: unresolved external symbol _pexit
...
我在项目中的所有文件。
我在做什么错?如何使我的项目看到_penter
和_pexit
的定义?
编辑:
extern entry:Proc
extern exit:Proc
PUBLIC _penter
PUBLIC _pexit
EXPORTS _penter
EXPORTS _penter
.code
PUSHREGS macro
push rax
push rcx
push rdx
push r8
push r9
push r10
push r11
endm
POPREGS macro
pop r11
pop r10
pop r9
pop r8
pop rdx
pop rcx
pop rax
endm
_penter proc
push rax
lahf
PUSHREGS
sub rsp, 8+16
movdqu xmmword ptr[rsp], xmm0
sub rsp ,8
sub rsp,28h
mov rcx,rsp
mov rcx,qword ptr[rcx+136]
call entry
add rsp,28h
add rsp, 8
movdqu xmm0, xmmword ptr[rsp]
add rsp, 8+ 16
POPREGS
sahf
pop rax
ret
_penter endp
_pexit proc
push rax
lahf
PUSHREGS
sub rsp, 8+16
movdqu xmmword ptr[rsp], xmm0
sub rsp ,8
sub rsp,28h
mov rcx,rsp
mov rcx,qword ptr[rcx+136]
call exit
add rsp,28h
add rsp, 8
movdqu xmm0, xmmword ptr[rsp]
add rsp, 8+ 16
POPREGS
sahf
pop rax
ret
_pexit endp
end