第一次嘗試
#include
#include
void
*mymemmove
(void
* destin,
const
void
* source,size_t num)
char
* sour =
(char
*)source;
char
* dest =
(char
*)destin;
if(dest > sour && dest <
(sour + num))}
else
}return destin;
}int
main()
;int arr1[4]
=;mymemmove
(arr1, arr,
sizeof
(arr));
for(
int i =
0; i <
4; i++
)printf
("\n");
return0;
}
本**實現了memmove()
的功能,主要就是要理解,當兩個字段空間重疊時,就需要從後往前拷貝,此處空間重疊並不是只要目標和源有重疊就算,而是如果目標的頭部重疊在了源中,那麼才算重疊,這點要想清楚,才能實現這個功能,另外,還需要注意的一點是,一定要記得引數合法性檢驗,否者可能會出現問題。
發表於 2020-11-20 09:02
模擬實現memmove函式
memmove函式也是從源src 拷貝n個位元組到目的 dst 中。與memcpy不同的是,memmove會考慮記憶體重疊問題,會對兩記憶體的位置進行判斷,從而考慮是從前往後拷貝或是從後往前拷貝。記憶體中的位置關係可以分為以下四種,而前三種又能統一劃分到一組,因為在這種情況下,從前往後拷貝時,拷貝過...
模擬實現memmove函式
int arr 6 將陣列前4個元素複製到後4個元素上,即將陣列變為 將陣列還原為初始在將後四個元素複製到三個元素上,即為 void my memcpy void dest,void src,size t count return ret int main memcpy arr 2,arr,16 將...
模擬實現memmove
這就是之前我所說到的,memcpy的乙個函式漏洞,他庫函式本身就不能避免這個漏洞,所以在進行模仿的時候雖然發現了這個問題但是還是沒有將這個問題彌補,因為有讓你彌補的地方,那就是來模仿這個 memmove 函式。再給大家來說一下memcpy函式的漏洞是哪個,就是上圖這樣,如果你開始將原始區域的內容複製...