恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

记一次符号类型不一致导致的链接错误

  • 首页
  • 资讯中心
  • /
  • 记一次符号类型不一致导致的链接错误

相关资讯

中职计算机教资面试备考:从技术到教学的实战策略 2026/8/2 17:37:22
如何永久免费激活IDM:3种简单方法完整指南 2026/8/2 17:37:23
SpringBoot非遗文化平台开发实践与架构设计 2026/8/5 16:50:09

最新资讯

微信聊天数据永久保存完整指南:如何将珍贵对话转化为个人数字资产
终极指南:EscapeFromTarkov-Trainer - 离线塔科夫的完整游戏体验解决方案
政务低代码平台实战(总纲)——从元数据引擎到可视化设计器的五个关键决策
Lava框架高级技巧:提升脉冲神经网络性能的10个优化策略
SmartBMS与Android应用无缝连接:实时监控电池状态的简单方法
如何用spreadsheet-reader处理大型CSV文件?开发者必学的内存优化技巧

今日推荐

GraphQL-CSS API全解析:useGqlCSS、GqlCSS组件与getStyles实用指南
告别语言障碍:KISS Translator 双语翻译插件终极指南
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

记一次符号类型不一致导致的链接错误

发布时间:2026/8/10 17:12:16
记一次符号类型不一致导致的链接错误 记一次符号类型不一致导致的链接错误两个头文件在WDK中有两个头文件ntddk.h:包含 wdm.h传统的 NT 架构驱动非即插即用ntifs.h:包含 ntddk.h 和 wdm.h文件系统驱动、文件系统过滤驱动由于 ntifs.h 已经包含了 ntddk.h只需包含 ntifs.h 即可。同时包含两者可能导致类型重定义等编译错误。报错信息IoCtlHandler.obj : error LNK2019: 无法解析的外部符号 “public: static long __cdecl HelpTool::GetEprocess(void *,struct _EPROCESS * *)” (?GetEprocessHelpToolSAJPEAXPEAPEAU_EPROCESSZ)函数 “long __cdecl ProtectProcess(void *)” (?ProtectProcessYAJPEAXZ) 中引用了该符号符号类型不一致我的源代码中分别引用了上面的两个头文件。Windows WDK 头文件如 wdm.h / ntifs.h中的 PEPROCESS 定义会根据预处理器宏尤其是NT_KERNEL或 _KERNEL_MODE来决定到底是引用 _EPROCESS 还是 _KPROCESS。检查HelpTool.obj中导出的符号发现dumpbin /SYMBOLS .\HelpTool.obj Microsoft (R) COFF/PE Dumper Version 14.51.36252.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file .\HelpTool.obj File Type: COFF OBJECT COFF SYMBOL TABLE 000 01058D9C ABS notype Static | comp.id 001 C0010990 ABS notype Static | feat.00 002 00000000 SECT1 notype Static | .drectve Section length 2F, #relocs 0, #linenums 0, checksum 0 004 00000000 SECT2 notype Static | .debug$S Section length 2028, #relocs 0, #linenums 0, checksum 0 006 00000000 SECT3 notype Static | .bss Section length 1, #relocs 0, #linenums 0, checksum 0, selection 2 (pick any) 008 00000000 SECT3 notype External | ExPoolZeroingNativelySupported 009 00000000 SECT4 notype Static | .text$mn Section length 62, #relocs 3, #linenums 0, checksum 4519E64B, selection 1 (pick no duplicates) 00B 00000000 SECT5 notype Static | .debug$S Section length 144, #relocs 8, #linenums 0, checksum 0, selection 5 (pick associative Section 0x4) 00D 00000000 UNDEF notype External | __imp_DbgPrintEx 00E 00000000 UNDEF notype External | __imp_PsLookupProcessByProcessId 00F 00000000 SECT4 notype () External | ?GetEprocessHelpToolSAJPEAXPEAPEAU_KPROCESSZ (public: static long __cdecl HelpTool::GetEprocess(void *,struct _KPROCESS * *)) 010 00000000 SECT4 notype Label | $LN6 011 00000000 SECT6 notype Static | .xdata Section length C, #relocs 0, #linenums 0, checksum B9123A2D, selection 5 (pick associative Section 0x4) 013 00000000 SECT6 notype Static | $unwind$?GetEprocessHelpToolSAJPEAXPEAPEAU_KPROCESSZ 014 00000000 SECT7 notype Static | .pdata Section length C, #relocs 3, #linenums 0, checksum 92CEA7C6, selection 5 (pick associative Section 0x4) 016 00000000 SECT7 notype Static | $pdata$?GetEprocessHelpToolSAJPEAXPEAPEAU_KPROCESSZ 017 00000000 SECT8 notype Static | .text$s Section length 39, #relocs 0, #linenums 0, checksum 81C4C899, selection 2 (pick any) 019 00000000 SECT8 notype External | ??_C_0DJKDOKOJHK?$FLProtectMyProcess?3?3HelpTool?$FN?3?5GeFNODOBFM ( ?? ?? ::FNODOBFM::string) 01A 00000000 SECT9 notype Static | .debug$S Section length 3C, #relocs 2, #linenums 0, checksum 0, selection 5 (pick associative Section 0x3) 01C 00000000 SECTA notype Static | .debug$T Section length 7C, #relocs 0, #linenums 0, checksum 0 01E 00000000 SECTB notype Static | .chks64 Section length 58, #relocs 0, #linenums 0, checksum 0 String Table Size 0x145 bytes Summary 1 .bss 58 .chks64 21A8 .debug$S 7C .debug$T 2F .drectve C .pdata 62 .text$mn 39 .text$s C .xdata对比两个编译单元看到的函数签名IoCtlHandler.cpp报错方 期望的符号是GetEprocessHelpToolSAJPEAXPEAPEAU**_EPROCESS**Z参数为 struct _EPROCESS **HelpTool.obj导出的符号是?GetEprocessHelpToolSAJPEAXPEAPEAU**_KPROCESS**Z参数为 struct _KPROCESS **在编译 HelpTool.cpp 时编译器认为 PEPROCESS 是 struct _KPROCESS *而在编译 IoCtlHandler.cpp 时PEPROCESS 被解析为 struct _EPROCESS *。解决方案我把参数中的peprocess改为了pvoid类型反正eprocess在内核驱动开发中就是一个不透明的数据结构最终都是要使用基址偏移的方式访问其中的字段索性让它直接为pvoid类型。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号