如何找出Kernel32依赖项的来源

时间:2018-05-16 21:50:27

标签: c++ visual-studio windows-xp

我正在构建一个应用程序,我刚刚添加了一个库(后者又使用了许多其他库),并且由于某种原因它正在尝试使用kernel32.dll中的“GetLogicalProcessorInfo”。不幸的是,这个功能比我的一些用户正在使用的Windows版本更新(一些使用XP SP2,这个功能需要XP SP3) - 所以我得到了关于此的错误报告。

我正在试图找出为什么这个函数被引用,但我找不到它。我没有在我正在使用的任何.lib文件中看到它。或者在任何.cpp或.h文件中。仍然,某事正在触发使用此功能。

那么,有没有办法找出它的来源?哪个功能或哪个库正在使用它?

我正在使用英特尔C ++编译器在Visual Studio 2015中进行开发。有一种方法可以告诉它为Windows XP编译,但支持的最低版本是SP3 - 在我添加这个库之前,我的代码工作正常。如果我必须推动人们转向SP3,那就这样吧,但我不愿意。许多人正在使用运行我的软件作为设备的电脑,通常甚至没有连接到互联网,并且已运行多年(因此旧操作系统)。

1 个答案:

答案 0 :(得分:0)

如果你有免疫调试器或ollydbg,你可以打开你的程序。加载后右键单击并选择显示程序导入的所有模块的视图。选择您的库并再次右键单击并单击search->所有模块间调用,您将看到模块从外部库调用的函数列表。如果双击特定功能,它将带您到该程序中调用该kernel32函数的位置。

很可能你可能无法摆脱它,因为它将被你无法控制的库的其他部分使用。