내 자신의 OS를 작성 중이며 자체 malloc realloc 기능을 구현해야했습니다. 그러나 내가 쓴 것은 안전하지 않을 수도 있고 변수가 실제로 파괴되지 않기 때문에 메모리 누수가 발생할 수도 있으며 메모리가 0으로 설정되어 있지만 변수 이름은 여전히 존재하기 때문에 메모리 누수가 발생할 수 있다고 생각합니다. 누군가이 코드에 어떤 취약점이 있는지 말해 줄 수 있습니까? 프로젝트는 github에 곧 추가되어 사용자 subado512로 완료됩니다.c malloc/realloc 함수를 올바르게 구현하는 방법은 무엇입니까?
코드 :
void * malloc(int nbytes)
{
char variable[nbytes];
return &variable;
}
void * free(string s) {
s= (string)malloc(0);
return &s;
}
void memory_copy(char *source, char *dest, int nbytes) {
int i;
for (i = 0; i < nbytes; i++) {
*(dest + i) = *(source + i); // dest[i] = source[i]
}
}
void *realloc(string s,uint8_t i) {
string ret;
ret=(string)malloc(i);
memory_copy(s,ret,i);
free(s);
return &ret;
}
상황에있는 코드를 사용 : 의사 코드의 비트는 가독성을
string buffstr = (string) malloc(200);
uint8_t i = 0;
while(reading)
{
buffstr=(string)realloc(buffstr,i+128);
buffstr[i]=readinput();
}
실제 운영체제를 사용하기 전에 먼 길을 가야 할까봐 걱정됩니다. – chqrlie
당신의'free()'함수가 C에 대한 당신의 이해에 자신감을 불어 넣지는 않습니다. – EOF
맞아요, 나도 몰라, 더 높은 수준의 언어로 프로그래밍하기 시작했습니다. C++ 만 있기 때문에 c를 알 수 있습니다. 그것이 OS이기 때문에 나는 c를 사용해야한다. 내가 골란이나 그와 비슷한 것을 사용할 수 있기를 바랍니다. – subado512