본문 바로가기

스터디122

[Chapter 1] 리눅스 시스템 프로그래밍 시작 (1) 유닉스(UNIX) 운영체제는 벨 연구소에서 제작되었으며 그 중 1970년대 PDF 컴퓨터들을 위해 설계된 유닉스는 다중 프로세서 서버들과 슈퍼컴퓨터들에 이르기까지 다양한 하드웨어 플랫폼을 위한 다중 사용자, 다중 태스킹 운영체제로 유명했다. (2) 리눅스(LINUX) 운영체제는 리누스 토발즈가 유닉스 프로그래머들의 도움을 받아 제작했으며 유닉스류 커널의 한 부분이다. 유닉스에서 실행되는것은 실제로 리눅스에서도 거의 실행된다. (3) 리눅스 프로그램 워게임에서 설명한적이 있지만, 리눅스 시스템에 로그인하고 쉘이 실행되고 우리는 쉘과 상호작용하면서 프로그램을 실행한다. 우리가 입력한(요청한) 명령어를 먼저 쉘(보통 bash)의 명령어인지 확인하고 그렇지 않을경우 특정 폴더안에 (명시되어있는)선언되어있.. 2011. 8. 21.
리눅스 심볼릭링크와 하드링크 리눅스에 링크는 심볼릭링크와 하드링크 두 가지가 있다. 먼저 심볼릭 링크는 간단하게 윈도우즈에서의 바로가기라고 생각하면 된다. ln -s 원본파일이름 링크파일이름 [gate@localhost iyounges.org]$ ls iyounges [gate@localhost iyounges.org]$ ln -s iyounges iyounges_ [gate@localhost iyounges.org]$ ls -l total 0 -rw-rw-r-- 1 gate gate 0 Aug 20 02:55 iyounges lrwxrwxrwx 1 gate gate 8 Aug 20 03:06 iyounges_ -> iyounges 이처럼 사용해주면 된다. 그런데 심볼릭 링크는 단지 바로가기 일뿐, 파일 안은 텅텅 비어있으며 심볼릭.. 2011. 8. 21.
리눅스 GDB 어셈블리어 AT&T 문법을 intel 문법으로 바꾸는 방법 //AT&T -> INTEL 먼저 AT&T 와 INTEL 둘의 문법 차이를 설명해보자면 mov $esp, $edx // EDX 에 ESP 를 복사한다. (AB) 이 둘이 서로 같은 뜻을 의미한다. 대체적으로 intel 문법이 특수문자를 사용하지 않고 해석방법도 매우 간단하다. 그래서 올리디버거를 사용하는 초보자들은 GDB 로 넘어오면 어려움을 호소하는데 이를 해결하는 방법이 있다. GDB 를 실행하고 다음과 같은 명령어를 입력한다. (gdb) set disassembly-flavor intel 종료하고 다시 실행하면 원래 AT&T 문법으로 돌아오는데 다음 명령어를 실행하면 intel 문법으로 고정된다. (gdb) set disassembly-flavor intel (gdb) q $echo "set disassembly-flavor .. 2011. 8. 20.
[BOF-Wargames] LOB Load of BOF LEVEL9 (troll -> vampire) 문제풀이 ------------------------------------------------------------------------------------------------------------------------- LOB Level9 [ Troll -> Vampire ] ------------------------------------------------------------------------------------------------------------------------- [troll@localhost troll]$ ./vampire argv error [troll@localhost troll]$ ./vampire aa stack is still your friend. [troll@loc.. 2011. 8. 19.
[BOF-Wargames] LOB Load of BOF LEVEL8 (orge -> troll) 문제풀이 ------------------------------------------------------------------------------------------------------------------------ LOB Level8 [ Orge -> Troll ] ------------------------------------------------------------------------------------------------------------------------- [orge@localhost orge]$ ls troll troll.c [orge@localhost orge]$ ./troll argc must be two! 무조건 인자가 두개 있어야지만 됩니다. 여기서 인자 두개는 Argv.. 2011. 8. 19.
[BOF-Wargames] LOB Load of BOF LEVEL7 (darkelf -> orge) 문제풀이 ------------------------------------------------------------------------------------------------------------------------- LOB Level7 [ Darkelf-> Orge ] ------------------------------------------------------------------------------------------------------------------------- [darkelf@localhost darkelf]$ ls orge orge.c xodnr [darkelf@localhost darkelf]$ ./orge argv error [darkelf@localhost darkelf].. 2011. 8. 19.
[BOF-Wargames] LOB Load of BOF LEVEL6 (wolfman -> darkelf) ------------------------------------------------------------------------------------------------------------------------- LOB Level6 [ Wolfman -> Darkelf ------------------------------------------------------------------------------------------------------------------------- [wolfman@localhost wolfman]$ ls darkelf darkelf.c [wolfman@localhost wolfman]$ ./darkelf argv error [wolfman@localhost wol.. 2011. 8. 19.
[BOF-Wargames] LOB Load of BOF LEVEL5 (orc -> wolfman) 문제풀이 ------------------------------------------------------------------------------------------------------------------------- LOB Level5 [ Orc -> Wolfman ] ------------------------------------------------------------------------------------------------------------------------- [orc@localhost orc]$ ls wolfman wolfman.c xodnr [orc@localhost orc]$ ./wolfman aa aa stack is still your friend. [orc@localh.. 2011. 8. 19.
[GDB-Analysis] GDB 바이너리 디버깅 3 이번에는 저번에 두개로 했던 것들과 strcat 함수를 곁들여 컴파일해 디버깅을 해보도록 하겠습니다. 다음부터는 버퍼 오버플로우와 관련된 함수를 주제로 디버깅 연습을 해갈 생각입니다. [gate@localhost tmp]$ cat t3.c #include #include int main(int argc, char *argv[]) { char buffer[40]; printf("%d ", argc); printf("%s ", argv[0]); printf("%s ", argv[1]); printf("%s ", argv[2]); printf("%s\n", argv[3]); strcpy(buffer, argv[1]); printf("%s\n", buffer); strcat(argv[2], argv[3]); p.. 2011. 8. 18.