2010-09-08 19 views
1

J'ai une DLL COM x64 (64 bits). En essayant de l'enregistrer avec Regsvr32 sur Windows 7 - accidents de Regsvr32. Regsvr32 est exécuté sous cmd avec privilèges administratifs ("exécuter en tant qu'administrateur"), j'ai essayé à la fois 32 et 64 bits cmd.exe et regsvr.exe, même deux PC différents et c'est toujours la même chose.Regsvr32 se bloque sur Windows 7

Déboguer le crash Regsvr32 signale qu'un dépassement de tampon s'est produit, quel peut être le problème?

Tous les mêmes, mais compilé comme Win32 (32 bits) fonctionne bien et n'a pas de problème dans l'enregistrement

Répondre

1

Très probablement l'implémentation de DllRegisterServer() dans cette DLL se bloque lorsqu'elle est compilée pour 64 bits. Si vous disposez du code source de la DLL, le mieux est de déboguer le code d'implémentation lors de son exécution et de résoudre la cause du problème. Cela peut être n'importe quelle erreur se produisant généralement lorsque le code n'est pas écrit de manière agile (32 bits/64 bits).

1

De toute évidence, le problème est que vous avez un dépassement de mémoire tampon. Maintenant, les dispositions de mémoire des processus Win32 et Win64 seront différentes, en particulier avec ASLR. Vous ne pouvez donc pas dire avec certitude que le buffer overflow aura les mêmes effets sur Win32. Cela est particulièrement vrai pour quelque chose comme Regsvr32, qui appellera une fonction dans votre DLL et quitter. Cela limite le temps pendant lequel le dépassement de tampon peut endommager les données.

La solution est bien sûr de simplement corriger le dépassement de la mémoire tampon.