繁体   English   中英

是否可以通过创建dll并将其放置在应用程序旁边来修补kernel32.dll函数?

[英]Is it possible to patch kernel32.dll function by creating dll and placing it beside application?

我正在查看旧软件的旧补丁: http : //cc.embarcadero.com/item/21475

该补丁的完整描述如下:

BDE“磁盘空间不足”问题的修补程序。 (4 Gb的倍数,术语:否特殊术语名称:Reinaldo Yanez电子邮件:ryaayr@yahoo.com URL:无摘要:针对BDE“磁盘空间不足”的错误-当磁盘可用空间接近倍数时,使用BDE可能会发生此错误of 4Gb。说明:本机是一个著名的4Gb BDE Bug的补丁程序,用于修复“可用磁盘空间不足”错误,该错误在磁盘可用空间接近4Gb的倍数时使用BDE时可能发生。更多信息,请参见Quality Central上的BDE报告号7089。

BDE中错误的原因显然是计算可用磁盘空间时idapi32.dll中的错误。 Idapi32.dll使用的是由kernel32.dll导出的名为GetDiskFreeSpaceA的api函数。

解决方案是为当前进程在kernel32.dll中“修补” GetDiskFreeSpaceA,对此函数的每次调用都重定向到新例程(NewGetDiskFreeSpaceA)。

包含补丁的源代码。 如果您使用其他编程语言(即非Delphi),则还包含预编译的DLL(FIX4GBug.dll)。 (如果可以编译包含的单元,则不需要分发DLL)

产品:Delphi(4-7)修复了比赛:无已上传:04-Feb-04 10:03:08 AM最后更新时间:22-Mar-04 6:44:49 PM

我想知道:如果MyApplication.exe或BDE idapi32.dll正在调用kernel32.dll函数GetDiskFreeSpaceA,那么仅通过将FIX4GBug.dll放在MyApplication.exe旁边,如何将调用重定向到kernerl32.dll / GetDiskFreeSpaceA到FIX4GBug.dll / GetDiskFreeSpaceA。还是在idapi32.dll旁边?

即简单地放置包含相同功能(相同名称和签名)的dll,除了应用程序外,还应此应用程序使用本地dll中的功能而不是Windows系统目录中的kernel32.dll?

除了应用程序外,是否简单放置包含相同功能(相同名称和相同签名)的dll,还会迫使该应用程序使用本地dll中的功能,而不是使用Windows系统目录中的kernel32.dll?

不,这还不够。 您的可执行文件没有理由加载该DLL。

您将需要从过程中挂钩GetDiskFreeSpaceA API函数。 提供的源代码将执行此操作。 另外,如果您通过调用LoadLibrary将其加载到进程中,我怀疑提供的DLL也会这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM