Existe-t-il any
que je peux imposer une contrainte de taille à un tampon de caractères de telle sorte qu'aucun type d'opération sur le tampon n'entraîne un accès hors-limites?imposer des restrictions sur la taille de la mémoire tampon
Répondre
En bref: Non
C ne fonctionne pas de contrôle d'exécution, sauf si vous les faites à la main.
Vous pouvez utiliser vos propres fonctions, macros et mise en mémoire par tampon pour vous protéger contre les accès non valides. Cependant, vous devrez utiliser cette interface partout, ce qui signifie que vous perdrez l'accès direct à ce tampon.
Vous constateriez également un impact sur les performances en raison des vérifications de condition supplémentaires. Vous pourriez peut-être éviter cela en utilisant un accès direct sur les branches de code dont il est prouvé qu'elles ne provoquent pas d'accès en dehors des limites.
EDIT:
Il y a aussi la question assez importante de « ce qui devrait le code faire une fois que la détection d'un accès non valide ». Votre programme doit-il afficher une erreur et quitter, comme s'il avait rencontré une exception dans d'autres langues? Devrait-il ignorer l'erreur? Devrait-il tenter de le réparer?
La voie C pour traiter cette question est de regarder-avant-saut et faire en sorte que chaque branche code/partie est au préalable en toute sécurité, plutôt que de vérifier chaque accès.
Cela peut aider: http://duma.sourceforge.net/ dans votre quête.
La réponse courte: Non
La réponse longue:
Pour assurer encore quelque chose d'aussi stupide que buffer[ULLONG_MAX]
ne va pas hors limites, vous devez déclarer votre tampon avec un bond plus grand que le plus grand nombre entier représentable sur le système. Ce n'est évidemment pas possible, mis à part la quantité de mémoire dont un tel tampon aurait besoin.
La solution pratique est que vous gardiez manuellement la trace de la taille de votre tampon et une indexation non fiable dans la mémoire tampon est vérifiée par rapport à la taille du tampon.
Voir notre Memory Safety Checker, qui a utilisé comme aide au débogage, instrumente votre code C pour déterminer si vous faites des erreurs avec des tableaux ou des tampons. Ceci trouve des problèmes que valgrind ne peut pas.
- 1. Dépasse la taille de la mémoire tampon?
- 2. Taille de l'audioQueue et taille de la mémoire tampon
- 3. Définir dynamiquement la taille de l'image mise en mémoire tampon
- 4. Allouer un tampon de plus d'une taille de page sur la pile va corrompre la mémoire?
- 5. Quelle est la taille de la mémoire tampon pour la programmation des sockets?
- 6. Restrictions de mémoire MIPS?
- 7. Modification de la taille de la mémoire tampon sur MediaPlayer (Android)?
- 8. Réduction de la taille de la mémoire tampon utilisée par un SQL (optimisation des performances Oracle)
- 9. Existe-t-il des restrictions sur la limite maximale d'utilisation de la taille de la pile?
- 10. Deuxième MPI_Send est suspendue si la taille de la mémoire tampon est sur 256
- 11. limitation de la mémoire tampon de réception
- 12. modifier la taille du tampon sur MediaPlayer
- 13. Envoi de la longueur du tampon et de la mémoire tampon sur la socket dans c
- 14. comment éviter la limite de la taille de la mémoire tampon dans Java Multidiffusion?
- 15. WDF Longueur de la mémoire tampon EvtIoDeviceControl
- 16. Comment configurer la taille de la mémoire tampon et la taille maximale des messages dans l'API Web ASP.NET
- 17. Restrictions sur la sérialisation
- 18. Comment obtenir la sortie complète de s'attendre quand la taille de la mémoire tampon interne de la taille de expect_out (tampon) dépasse?
- 19. La taille de la mémoire tampon de la console d'erreur Firefox est trop petite
- 20. Taille de tampon QSqlQuery
- 21. Devinez une taille de mémoire tampon et rappeler une fonction api ou appeler twotimes chaque fois pour obtenir exactement la taille de la mémoire tampon
- 22. Comment augmenter le plafond de taille de la mémoire tampon des requêtes RIA Services?
- 23. L'allocation de mémoire tampon n'est pas multiple de la taille des mots
- 24. Comment décider de la taille de la mémoire tampon de destination snprintf
- 25. pouvons-nous imposer des restrictions sur jaxb globalbindings pour mapper xs: dateTime à java.util.Date
- 26. comment augmenter la taille du tampon jsch?
- 27. IndexOutOfRangeException lorsqu'un flux est un multiple de la taille de la mémoire tampon
- 28. Session - taille de la mémoire des objets
- 29. Quelle est la taille de la mémoire tampon moyenne commune pour InternetReadFile?
- 30. Taille de la mémoire tampon pour la capture de paquets dans l'espace noyau?