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