일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 풀이
- NAPT
- ncurses
- doupdate
- REDIS
- cbpf
- wnourefresh
- level trigger
- BOF
- ioctl
- iptables
- epoll_wait
- .net core 7
- 어셈블리어
- wrefresh
- Compiler
- LOB
- mvwin
- architecture
- epoll
- DOCKER-USER
- .nret core 배포
- edge trigger
- Docker
- vtable
- C언어
- packet flow
- 취약점
- rfc5508
- packet filter
- Today
- Total
목록Computer Science (129)
Tuuna Computer Science
흔히 사용하는 프로그램은 하드 디스크에 위치한다. 이 하드디스크에 위치한 프로그램을 실행하면 메모리상에 복사된다. 즉, 프로그램이 복사된 이미지가 올라가는 것이다 -> 서로 완전히 독립적인 프로그램의 실행 가능 -> 여러개의 이미지가 가능 ( 멀티 프로세스, 멀티스레딩) 프로세스의 상태 동시에 프로그램을 실행하면 동시에 프로세스가 작동하는 것이라고 생각할 수 있지만 사실은 그것이 아니라 A라는 프로그램 실행하다가 중단되면 B 프로그램 C 프로그램으로와 같이 Switching한다. 이 Switching시간이 매우 짧기 때문에 프로그램들이 동시에 실행하는것으로 착각할 수 있다. 이를 -> 멀티 태스킹 운영체제라고 한다. (시분할) (time sharing) 프로세스는 4가지의 상태중 하나를 가지게 된다. r..
c 로 작성된 코드다. str를 포인터형으로 선언하여 문자열 " this_is_pointer"를 가리키게 하고 buffer를 배열로 선언하여 hello world를 선언했다. 이렇게 완성된 코드를 올리디버거로 디버깅 과정에서 포인터형으로 선언한 곳에서는 OFFSET 00404000처럼 메모리 덤프 주소를 가리키는것을 볼 수 있당. 그리고 배열로 선언한 부분에서는 값을 직접 메모리에 넣는 것을 볼 수 있다. 즉, 배열은 그냥 주소가 아닌 문자열 데이터가 들어간다. 그리고 LEA eax, [esp+1c]로 값들이 저장된 스택의 주소를 따온다. 의문점 : printf함수를 호출하는 부분에서 OFFSET 004011를 확인할 수 있다. 그럼 printf안에 들어있는 문자열들을 포인터형이라고 말할 수 있는가? A..
실행파일을 gdb로 바이너리 파일을 디버깅하고 디스어셈하면 각 함수 호출부분에 call 0x40fad0 와 call 0x4004a0 을 볼 수 있다. call 0x40fad0 이렇게만 적혀 있는 것은 정적링크로 컴파일 된 바이너리파일을 디스어셈하였을 때 볼 수 있는 현상이다. ( gcc -o (binary) (binary.c) -static : static옵션을 주면 정적링크로 컴파일 할 수 있다.) 그리고 call 0x4004a0 은 바이너리를 동적링크로 컴파일했을 때 볼 수 있는 현상이다. 지금부터 동적링크와 정적링크와의 차이점과 동적 링크결과 함수 뒤에 붙는 Plt, Got에 대해서 알아볼 것이다. 일단 정적링크와 동적링크에대해서 알아보기 위해서는 C 언어로 작성된 소스파일이 어떻게 컴파일과정을 거..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112#include /*바둑판은 배열로 세팅해서 막대가 있는곳은 1로 한다.시작점을 두고 바둑판과 0(가로), 1(세로)에따라 바뀐다.가로와 세로를 조건문으로 두자 ! 배열은 0부터하므로 값을 설정해서 0부터 받게하자 */int w, h;int badook[100][100]; //배열만 선언, 입력받아서in..
인자전달의 기본방식은 값의 복사이다! 함수호출 시 전달되는 값은 매개변수에 복사가 된다. 가장 중요한건 '값의 복사'라는 것이다. 즉, 전달되는 인자와 매개변수는 별개다! int simple(int num) { } int main(void) { int age=17; simple(age); } 이 코드를 보았을 때 age와 num은 단지 값을 주고받을 뿐 더 이상의 관계가 아니라는 것이다. age = num이 절대 아니라는 것이다. 그냥 값만 전달 할 뿐... '복사'... 하지만 age = num이 아니라 했으니 age를 넘기는 것은 어떻게 하는 걸까 이는 포인터를 사용해야 한다. 즉 age하는 변수의 주소에 직접 접근해야 하기에 int simple(int* num) { } int main(void) {..
LEA EBX, [EBP-4] : 스택기준으로 EBP-4의 주소값을 계산해서 EBX에 넣어라 이를 MOV 명령어로 나타내면 MOV EAX, EBP : EBP의 주소값을 계산해서 EAX에 넣어라 SUB EAX, 4 : 그 주소에서 4를 빼라 => [EBP-4] 이다. 그 이유는 MOV 명령어의 피연산자부분은 반드시 상수여야 하기 때문이다. 주의! MOV EAX, [EBP-4]는 단지 EBP-4의 주소에 들어있는 값을 넣는 것이다. 위들의 주소값을 얻었을 때 그 값을 사용하는 방법은 MOV EAX, [EBX] 이다. [REG, MEMORY] = 그 메모리와 레지스터 주소값에 들어있는 값을 참조
가상메모리란? ->프로그램을 실행할 때 실제 메모리 주소를 사용하지 않고 가상의 메모리 주소를 사용한다. 또한, 가상메모리는 메모리 관리 장치로 인해 물리 주소로 바뀌게 된다. (32bit 운영체제 환경가정) 즉 사용자의 컴퓨터 장착된 실제메모리 주소가 3G라면 가상메모리는 32bit운영체제가 가질 수 있는 최대 메모리 4G에 대한 가상메모리가 생성되고 이는 물리메모리 주소로 변환된다. 또한 덧 붙이자면 디스크 공간도 메모리공간으로써 사용할 수 있다. 메모리구조 : 코드영역, 초기화된 데이터 영역, 비초기화된 데이터 영역, Heap영역, 공유 라이브러리 영역, 스택영역//커널영역 0x00000000 커널 : 0xC0000000~ 0xFFFFFFFF -> 사용자가 프로그램을 실행하여 되는 프로세서는 자신만..
12345678910111213141516171819202122232425262728#include void clearna(void){ while(getchar()!='\n'); // \n이 나올때 까지 읽어들인다 } int main(void){ char perid[7]; char name[10]; fputs("주민번호 앞 6자리 입력: ", stdout); fgets(perid, sizeof(perid), stdin); //fgets함수는 \n을 만날 때 까지 읽어들이는 함수이다. clearna(); //입력버퍼 지우기! /*getchar(); = 이것도 가능 *//*배열의 크기가 7이므로 6자리 입력 + NULL \n이 밀려 버퍼에 남아 있기 때문에 이것만 읽고 넘어가 버리기 때문에 반복문을 통해 이..
#include //getchar fgetc putchar fputc puts fputs gets fgets //입력받은 문자가 소문자이면 대문자로 대문자이면 소문자로 변환시켜주는 프로그램 int converse(int ch) { int diff='a'-'A'; /* 대문자와 소문자의 차이값은 32이다. */ if(ch>='A' && ch='a' && ch
/* 데이터 기반의 입출력- > 실행프로그램과 하드디스크에 저장되어 있는 파일과의 연결을 위한 스트림의 형성을 우리가 직접 운영체제에게 요구! 프로그램 중심으로 프로그램 안으로 데이터가 흘러 들어오는 것이 입력 플로그램 밖으로 데이터가 흘러 낙는 것이 출력이다. 출력을 담당하는 모니터와 입력을 담당하는 키보드 사이에 어떠한 경로를 가지고 도와주는 다라의 역할을 '스트림'이라 한다!(매개체) 입출력 스트림; 운영체제는 외부장치와 프로그램과의 데이터 송수신의 도구가 되는 스트림을 제공한다! 스트림의 생성과 소멸 (콘솔)(모니터와 키보드)와 파일 입출력 사이에는 차이점이 하나 있다. 파일과의 연결은 스트림의 생성을 우리가 하지만 콘솔과의 연결을 위한 스트림의 생성은 요구 하지않는다. --------------..