Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: 大饼   发起时间: 2009-09-06 04:45 上午   回复: 2

Print Search
帖子排序:    
   2009-09-06, 04:45 上午
cctvcccc 离线,最后访问时间: 2009/9/2 2:56:55 大饼

发帖数前200位
注册: 2009-09-01
发 贴: 5
为什么只要包含头文件,就能调用api
Reply Quote
我们平时调用系统api的时候,只要包含头文件就行了,比如windows.h,但是系统api是在dll中的呀 ,我们并没有加载这些dll呀,请各位老师指教
IP 地址: 已记录   报告
   2009-09-06, 11:05 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 为什么只要包含头文件,就能调用api
Reply Quote

简单来说,是IDE和编译器/链接器暗中帮的忙。

首先,在使用IDE创建一个新的项目时,IDE就会根据程序类型自动把常用库文件的.lib文件加入到链接选项中。打开项目属性对话框的链接页,就可以看到IDE默认加入到链接选项中的.lib文件:

kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

 前三个lib文件(kernel32.lib user32.lib gdi32.lib)和advapi32.lib 基本囊括了大多数API的链接信息。

链接器会根据.lib信息产生合适的导入表(IAT),在程序运行时,NTDLL中的Loader会遍历IAT把需要的DLL加载进来,这就是通常所谓的隐式加载DLL。 

这个看似浅显的问题实际上非常好。代表着思维在进入一个更深的层次,开始思考“本来看似不值得”思考的问题,挖掘隐藏在简单表面下的更多道理。


IP 地址: 已记录   报告
   2009-09-06, 12:03 下午
cctvcccc 离线,最后访问时间: 2009/9/2 2:56:55 大饼

发帖数前200位
注册: 2009-09-01
发 贴: 5
Re: 为什么只要包含头文件,就能调用api
Reply Quote
多谢张老师指点
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 为什么只要包含头文件,就能调用api

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.