windows - _penter 和 _pexit 符号未见
问题描述
使用 Visual Studio 2013 C++ 在 Windows 中编写解决方案并尝试使 _penter 和 _pexit 挂钩工作。
当我使用 /Gh 和 /GH 编译它时,获取 error LNK2001: unresolved external symbol _pexit
并 获取我的所有项目文件。error LNK2001: unresolved external symbol _penter
我有一个包含两个项目的解决方案 - 一个是使用 /GH 和 /Gh 编译的主项目,另一个是在程序集文件中定义的 DLL 项目_penter
(_pexit
为它编写了一个单独的程序集文件,因为我的应用程序是 x64)。
如果我有另一个符号(DLL 中的不同函数),则可以看到它并且我可以从另一个项目中调用它并且它可以按预期正常工作,但是当我使用 /GH 和 /Gh 选项编译时它没有找到_penter
和的定义_pexit
。无法找到为什么会发生这种情况。
此外,如果我尝试在 cpp 文件本身中编写_penter
and _pexit
,它会被暴露并且其他项目能够看到它。但是我不能在 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
and的定义_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
解决方案
推荐阅读
- javascript - 上传多个文件时提高性能
- macros - 最小化窗口然后使用 WinActivate 并调出窗口但窗口然后变为不活动
- node.js - require('.') 与 require(__filename) 不同;
- nginx - 防止 nginx 为未经授权的用户将流量路由到另一个 ec2 实例
- python - 组合两个字符串列表
- django - 来自 Django 聚合查询的 Pandas
- curl - 如何通过 Google Drive 的 API 访问与 Google 的 API Explorer 相同的文件列表?
- javascript - 点击事件上的 Ajax
- android - 致命错误:未找到 sys/syslimits.h 文件
- javascript - JavaScript:使用动态键值解析 JSON