1

我有一个 x64(64 位)COM dll。尝试在 Windows 7 上使用 Regsvr32 注册它时 - Regsvr32 崩溃。

Regsvr32 在具有管理权限的 cmd 下运行(“以管理员身份运行”),我尝试了 32 位和 64 位 cmd.exe 和 regsvr.exe,即使是两台不同的 PC,它总是相同的。

调试崩溃的 Regsvr32 报告缓冲区溢出已经发生,可能是什么问题?

都一样,但编译为 Win32(32 位)工作正常,注册没有问题

4

2 回答 2

1

显然,问题是你有一个缓冲区溢出。现在 Win32 和 Win64 进程的内存布局会有所不同,尤其是使用 ASLR。因此,您不能肯定地说缓冲区溢出会对 Win32 产生相同的影响。对于像 Regsvr32 这样的东西尤其如此,它将调用 DLL 中的一个函数并退出。这限制了缓冲区溢出可能损坏数据的时间。

解决方案当然是修复缓冲区溢出。

于 2010-09-08T08:37:51.030 回答
1

当为 64 位编译时,该 DLL 中的实现很可能会DllRegisterServer()崩溃。

如果您有 DLL 的源代码,最好的办法是在执行代码时对其进行调试并解决问题的根本原因。这可能是代码不是以位无关(32 位/64 位可移植)方式编写时通常发生的任何错误。

于 2010-09-08T08:46:03.490 回答