Wie Sie verhindern, dass memcpy-Puffer-überlauf?

Gibt es einige binäre Puffer mit fester Größe in einem Programm, das verwendet werden, um Daten zu speichern.
Und memcpy verwendet wird, die zum kopieren der Puffer von einem zum anderen. Da die Quelle-Puffer größer sein kann als der Ziel-Puffer. Wie kann ich erkennen, ob es buffer overflow?

  • Erkennen? Kennen Sie Ziel-Puffer-Größe? Dann schreiben Sie code wie diesen memcpy(src, dst, sizeof(dst))
  • Vergleichen Sie die Größe der Quelle-Puffer-und Ziel-Puffer und sehen, welche größer ist?
  • dass sizeof nur um die Größe eines Zeigers.
  • Behandeln Sie es als pseudocode. Es kann die Größe eines Puffer-je nach Deklaration-Stil. Mir ist klar, dass sizeof(dst *) gibt die Größe des Zeigers und sizeof(dst [123]) gibt die Puffergröße, zumindest, wenn 1 element = 1 byte.
  • wenn dst ist ein Zeiger. Wenn es etwas anderes (z.B. ein array) wird es geben, die Größe der.
  • Ich war der Annahme, vielleicht falsch, dass OP war der Umgang mit Zeigern, sonst wäre es kein problem in den ersten Platz.
  • IIUC, sein problem ist das Ziel, nicht die Quelle. Es scheint vernünftig zu kümmern, ob die Daten passen in das Ziel-auch wenn die Quelle ist ein array. (Keiner von denen die wirklich hilft ihm, denn auch wenn die Quelle ist ein array, sizeof geben wird, die Größe des kompletten Arrays, auch wenn nur teilweise ausgefüllt ist.)

InformationsquelleAutor Michael D | 2012-08-31
Schreibe einen Kommentar