Opis funkcji API CopyMemory (...)
kopiuje ciąg bajtów z jednego obszaru pamięci do drugiego obszaru tej pamięci. Źródłowy i docelowy obszar pamięci muszą być oddzielnymi obszarami (nie mogą nakładać się na siebie).
Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (Destination As Any, _ Source As Any, _ ByVal Length As Long)
- argumenty:
- Destination
- wskaźnik do początku docelowego obszaru pamięci
- Source
- wskaźnik do początku źródłowego obszaru pamięci
- Length
- długość obszaru do skopiowania (w bajtach)
- zwraca:
-
procedura ta nie zwraca żadnej wartości
Uwagi.
- Brak przed argumentem Destination lub Source słowa kluczowego ByVal oznacza, że wskazuje on bezpośrednio na zmienną tablicową lub obiekt. Jeśli chcemy wykorzystać funkcję w celu operowania na ciągach znaków lub wskaźnikach musimy argument Destination lub Source poprzedzić słowem kluczowym ByVal. Zostanie wtedy przekazana wartość wskaźnika do ciągu znaków lub wartość samego wskaźnika.
- Jeżeli bloki pamięci nakładają się, wynik kopiowania pamięci tą funkcją jest niezdefiniowany. Aby kopiować nakładające się bloki pamięci należy zastosować funkcję MoveMemory(...).
- Docelowy obszar pamięci wskazywany przez parametr Destination musi być wystarczająco duży, żeby zmieścić Length bajtów obszaru źródłowego, w przeciwnym wypadku może nastąpić przepełnienie bufora. Umożliwia to ataki typu DoS, a nawet wstrzyknięcie i wykonanie własnego kodu.
- Z w/w powodu funkcje kopiujące, które nie sprawdzają wielkości zapisywanego obszaru pamięci i mogące w efekcie końcowym wywołać krytyczne z punktu widzenia zabezpieczeń przepełnienia bufora zostały wciągnięte przez Microsoft na listę zakazanych funkcji. Artykuł: Zakazane funkcje API z 06.12.2012 roku.