전체 글 94

C 3차시 과제

-1535- 문제 *주의사항 : 이 (함수 제출형) 문제는 함수 부분만 작성해서 제출해야 오류 없이 채점이 됩니다. 미리 작성되어있는 코드를 읽고 해석해서, 함수 부분만 작성해서 제출하면 됩니다. 작성한 함수의 테스트를 위해서는 제시된 코드를 복사해 사용하면 되고, 제출은 함수 부분만 하세요. ------ 배열에서 가장 큰 값이 처음 나타나는 위치를 출력하시오. 단, 함수형 문제이므로 함수 f()만 작성하시오. [함수형 문제란??] 함수형 문제는 기본적인 main() 등은 미리 작성되어 있습니다. 미리 작성되어 있는 프로그램은 다음과 같습니다. 미리 작성된 프로그램을 복사해 붙여 넣은 후 함수 부분을 설계하여 작성해 넣고, 테스트 한 후, 함수 부분만 제출하세요. [미리 작성된 프로그램] - C/C++로..

scanf, gets, fgets 차이

scanf()는 문자열 입력시, 엔터전까지 문자열을 가져온다. 공백이 나오면 공백 이전까지 저장되고 마지막에 \0가 붙는다. 공백을 입력받기 어렵다보니 잘 안쓴다. abc를 입력했으니 실질적으로는 abc\0 이런식으로 저장된다. gets()는 \n까지 가져오고 \n을 \0으로 바꾼다. 결론적으로 abc\0가 저장된다. fgets()는 \n까지 가져오고 뒤에 \0를 덧붙여서 저장해준다. abc\n\0으로 저장된다. C는 입출력을 버퍼를 통해서 한다. 키보드로 입력을 할때 문자열이 버퍼에 들어간다. 그리고 함수들이 그 버퍼에서 가져오게 된다. scanf같은 함수가 문자들을 가지고 올때, \n을 버퍼에 남기고 가져가기 때문에, 다음에 문자열 입력을 받을 때 어려움이 생길 수 있다. 또한 우리가 일반적으로 입력..

프로그래밍/C 2022.04.01

EOF(End Of File)

EOF는 End Of File의 약자로 -1로 정의되어있다. 파일의 끝을 탐지하는 방법은 운영체제마다 다르지만, C언어에서는 EOF를 통해서 파일의 끝을 탐지하고 키보드를 통한 입력의 끝도 알려준다. 함수 호출시 에러가 있는지 없는지에 대한 반환값을 검사할 때 주로 사용되고 이는 신뢰성있는 코드를 작성하는데 도움을 준다. 키보드를 대상으로 하는 getchar나 scanf같은 함수들은 두가지 경우에 EOF를 반환한다. 1) 함수 호출을 실패할때 2) 유닉스는 Ctrl + D, 윈도우는 Ctrl + Z를 통해서 EOF를 발생시킬때 키보드의 입력에서 엔터도 결국은 문자라서 끝을 알려줄 방법이 없다. 때문에 위와같은 특정 키를 입력해서 EOF를 발생시킨다. 외외로 평소에 반환 값이 있는지 몰랐던 함수들이 꽤 있..

프로그래밍/C 2022.03.31

함수 호출 방식

함수를 호출하는 형태에 따라서 Call-by-reference와 Call-by-value를 구분한다. 일반적으로 함수에 인자를 넘겨줄 때, 단순히 그 값이 복사되어 전달이 이루어지는 형태가 Call-by-value이다. 때문에 여기서 pp에게 a를 인자로 넘겨줄때, 값만 a에서 매개변수 n으로 복사가 되기 때문에, 결과적으로는 변수 a의 값이 변하지 않는다. 반면 Call-by-reference는 메모리 접근에 이용되는 주소 값을 전달하는 형태이다. 이렇게 수정하면, pp 함수가 직접 메모리에 접근해서 a의 값을 증가시킬 수 있다. 이러한 이유 때문에 scanf도 &연산자를 사용하여 값을 저장시킨다.

프로그래밍/C 2022.03.29

C 배열 접근

문제를 풀다가 모르는 부분을 발견했다. 검색을 해도 안나와서 영어로 끄적거렸더니 확실한 답을 찾을 수 있었다. 배열을 []를 통해서 접근하는 것과 주소 그 자체로 접근하는 것의 차이를 잘 모르고 있었다. 배열 그 자체는 주소를 가리키고, []는 *처럼 그 주소가 가리키는 값을 가리킨다. https://www.programiz.com/c-programming/examples/access-array-pointer C Program to Access Array Elements Using Pointer www.programiz.com data[0] is equivalent to *data and &data[0] is equivalent to data data[1] is equivalent to *(data + ..

프로그래밍/C 2022.03.25

FTZ level8 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level8/break the world 로그인하고 힌트 확인해봅시다. 파일을 찾아야 합니다. 알려진 것은 용량이 2700이라는 것 밖에 없네요. find 명령어를 사용해서 찾아봅시다. -size 2700c를 이용하면 되겠네요. man을 통해 find를 찾아보니, 접미사 c를 통해 바이트 단위인것을 명시해줄 수 있다고 나와있습니다. 딱봐도 found.txt가 수상해보입니다. 한번 읽어보겠습니다. 여기서 두번째 필드가 암호화된 비밀번호의 값입니다. 뒤엔 수정날자나, 사용기간등이 나와있는데, 신경쓰실 필요 없습니다. 두번째 필드를 보면 $Hashid$Salt$Hash value 순으로 구성된 것을 볼 수 있습니다. ..

WARGAME/FTZ 2022.02.26

FTZ level7 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level7/come together 원래 저 아래처럼 문자열이 나와야 합니다. 하지만 /bin/wrong.txt가 없어서 원래 cat /bin/wrong.txt할 수 없다고 나옵니다. root/hackerschool로 따로 로그인을 해서 wrong.txt를 만들고 저 아래처럼 문자열을 입력해줬습니다. 아까 힌트에서 2진수를 10진수로 바꿀 수 있는가? 라고 물어봤는 데, 딱 봐도 저걸 10진수로 바꾸란 소리로 들리죠? 일단 -를 1, _를 0으로 두고 한번 이진수로 바꿔봅시다. 1101101 1100001 1110100 1100101네요. 10진수로 바꿔보면 109 97 116 101 네요. 안되네요. 혹시 모..

WARGAME/FTZ 2022.02.26

FTZ level6 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level6/what the hell 접속하자마자 이렇게 뜨네요. 몰라서 검색해봤는데, FTZ관련 내용밖에 없어서 위키백과를 찾아보니, 옛날 PC통신 서비스라고 하네요. 하이텔 접속해봅시다. 이러다가 갑자기 꺼지네요. 동작을 안하나 봅니다. 다시 키고나서, 프로그램을 혹시 끌 수 있을 까 싶어서 ctrl + c 눌러서 프로세스를 종료시키려 해봤습니다. 걍 나가지네요. 솔직히 아는 게 없어서 그런지 황당하네요.

WARGAME/FTZ 2022.02.26

FTZ level5 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level5/what is your name? 힌트 먼저 봅시다. /usr/bin/level5가 /tmp에 임시파일을 생성한다고 하네요. 실행시키고 /tmp를 확인해보겠습니다. 실행을 계속 시켜봐도 /tmp에는 임시파일이 생성되지 않네요. 임시파일이라 프로그램이 꺼지면서 임시파일도 삭제되는 것 같네요. 임시파일이 삭제되지 않게 하는 방법이 뭐가 있을까요? 한번 /usr/bin/level5의 퍼미션을 확인해봅시다. level6의 권한으로 SetUID가 설정되어있네요. 프로그램을 실행시켰을 때, 프로그램은 level6 퍼미션으로 /tmp에 level5.tmp라는 임시파일을 만들고, 삭제합니다. 만약 level5.tm..

WARGAME/FTZ 2022.02.24

FTZ level4 풀이

*FTZ를 공부하면서 배운 것들을 정리했습니다. 틀린 정보가 있을 수 있습니다. 계정/비번: level4/suck my brain 로그인하고 힌트 먼저 봅시다. /etc/xinetd.d/ 에 백도어를 심어놓았다네요. 확인해봅시다. 이 문제를 풀기 위해선 먼저 데몬에 대해 알고 있어야 합니다. 먼저 이 경로에 있는 다른 파일들을 확인해봐도 다 비슷한 형태를 하고있는 것을 알 수 있습니다. 먼저 데몬에 대해 한번 알아보자면, 데몬은 특정 서비스를 실행시키기 위해 메모리에 상주해있는 백그라운드 프로세스를 말합니다. 만약 요청이 들어오면 그 요청을 받고 즉시 처리할 수 있도록 대기중인 프로세스죠. 데몬은 실행 모드가 두 가지가 있는데, standalone방식과 xinetd 방식이 있습니다. standalone방..

WARGAME/FTZ 2022.02.17