我有一个 x64(64 位)COM dll。尝试在 Windows 7 上使用 Regsvr32 注册它时 - Regsvr32 崩溃。
Regsvr32 在具有管理权限的 cmd 下运行(“以管理员身份运行”),我尝试了 32 位和 64 位 cmd.exe 和 regsvr.exe,即使是两台不同的 PC,它总是相同的。
调试崩溃的 Regsvr32 报告缓冲区溢出已经发生,可能是什么问题?
都一样,但编译为 Win32(32 位)工作正常,注册没有问题
显然,问题是你有一个缓冲区溢出。现在 Win32 和 Win64 进程的内存布局会有所不同,尤其是使用 ASLR。因此,您不能肯定地说缓冲区溢出会对 Win32 产生相同的影响。对于像 Regsvr32 这样的东西尤其如此,它将调用 DLL 中的一个函数并退出。这限制了缓冲区溢出可能损坏数据的时间。
解决方案当然是修复缓冲区溢出。
当为 64 位编译时,该 DLL 中的实现很可能会DllRegisterServer()
崩溃。
如果您有 DLL 的源代码,最好的办法是在执行代码时对其进行调试并解决问题的根本原因。这可能是代码不是以位无关(32 位/64 位可移植)方式编写时通常发生的任何错误。