분류 전체보기 289

파이썬 함수와 제어문

Python 함수 def [함수이름] (인자1, 인자2, ...) 수행문 요 형식으로 사용한다. 인자 개념에서 실인수, 가인수 그런게 있던데 함수 호출할 때 함수로 넘겨주는 인자가 실인수, 함수 선언할 때 적는 인자가 가인수 파이썬 함수의 좋은점은 함수 선언할 때 인자의 자료형을 정해주지 않아도 된다는 점이다. C언어에서는 int add(int a, int b) 뭐 이런 식으로 선언하여 약간은 한정적인 인자전달을 했던 반면에 파이썬은 동적인 인자전달이 가능하다. 이런걸 Dynamic Typing(동적인 형 결정) 이라고 부른다. 그리고 인자를 고정된 디폴트 값으로 줄 수도 있다. 모든 것은 예제로 보여주지. Python 제어문 여타 언어들에도 있는 if문, for문, while문 등의 제어문들을 알아보겠..

파이썬 Indentation(들여쓰기) 문법

파이썬에서는 인덴테이션을 잘 안해주면 오류가 난다.-_-; 나같은 경우는 원래 c언어 등 여타 언어들을 코딩할 때 버릇이 별로 안좋았다. 들여쓰기를 잘 안해서 가독성이 매우 떨어졌었음. 파이썬에서는 이런 내 좋지 못한 버릇을 용납하질 않는다. 반드시 해야하는 규칙들이 있다. 어찌보면 당연한 것들이다. 다른 언어에서는 굳이 지켜주지 않아도 되지만, 파이썬에선 지켜줘야 한다. 대신에 코드 블록들을 괄호로 묶는 귀찮은 과정이 사라진다. 1. 가장 큰 범위(가장 바깥)의 코드 블록은 무조건 들여쓰기를 하면 안된다. 2. 제어문들의 수행문들은 같은 열에 위치해야 한다. 3. Tab(탭)과 space(공백)을 함께 쓰지 않는다. 편집기 마다 탭과 공백을 구분짓는 칸 수가 다를 수 있다. 탭은 일반적으로 8칸인데, ..

파이썬 객체 주소 식별과 레퍼런스 카운트

객체의 주소를 식별할 때 id라는 내장 함수를 사용한다. C언어에서는 포인터를 사용해야 할 것을.. 파이썬에선 = 이 객체 링크, == 이 값 할당 이므로 b=a 이런식으로 하면 b가 a와 같은 주소를 가르키게 하는 것이다. 주소가 같은지 확인하는 방법도 있다. Reference count (래퍼런스 카운트) 파이썬의 모든 객체들은 래퍼런스 카운트라는 값을 갖는다. 파이썬에선 사용자가 딱히 메모리에 신경 쓸 필요가 없다. 안쓰면 알아서 제거하고 필요하면 알아서 확장해준다. (알아서 제거 하는 일을 Garbage Collection(쓰레기 수집) 이라고 한다.) 이 때, "알아서" 는 어떻게 이루어지는 것일까. 요 개념에서 래퍼런스 카운트 라는 녀석이 나온다. 모든 객체들은 래퍼런스 카운트라는 값을 가진다..

파이썬 자료형

1. 문자열 (string) 문자들의 모임이다. ' ' 나 " " 사이에 위치한다. 여타 언어의 문자열과 다른게 없다. 값을 변경시킬 수 없다. 위와 같은 인덱싱으로 문자배열을 사용할 수도 있고, 슬라이싱으로 범위를 지정하여 문자열을 출력할 수도 있다. a[n:m] => n번째 부터 m번째 문자열 출력 a[n:] => n번째 부터 끝까지 문자열 출력 a[:] => 처음부터 끝까지 문자열 출력 슬라이싱은 확장하여 추가로 3가지 값까지 가질 수 있다. (start:stop:step) 생략되었을 때 start=0, stop=자료형 크기, step=1 이다. s[::2] -> 'ac' (2칸 단위로) s[::-1] -> 'dcba' (거꾸로) 또한 연결(+)과 반복(*)연산도 수행 가능하다. 그리고 아까 문자열..

파이썬 설치 및 기본 사용법

1. 파이썬 설치 https://www.python.org/ 나 source forge에 가면 받을 수 있다. 나는 https://www.python.org/ 요기서 받아보겠음 downloads 탭에서 버젼을 선택하고 다운 받아서 다음 다음 다음 하면 설치가 완료된다. 설치하는 거야 뭐.. 클릭 몇번이면 끝나지만 이제 설치가 되고 나면 생기는 파일들에 대해서 알아야 한다. IDLE(Python CUI) Module Docs Python(Command Line) Python Manuals Uninstall Python 요래 5가지가 생긴다. 개략적인 설명을 해드림. * IDLE(Python GUI) : 파이썬의 대화식 인터프리터이다. GUI로 되어있음. * Module Docs : 파이썬 2.1 버젼 이상..

윈도우 스레드 스케줄링 그리고 컨텍스트 스위치

스레드 스케줄링에 대해 알아보자. 컴퓨터가 여러개의 프로그램을 한번에 사용가능한 이유가 바로 스케줄링이라는 것이 존재하기 때문이다. 각 스레드의 우선 순위에 따라서 CPU사용 시간을 할당하여 처리하므로 나름 쾌적한? 컴퓨터 이용이 가능한 것이다. 윈도우는 기본적으로 우선 순위 기반의 선점형 스케줄링을 사용한다. 이렇게 처리 우선 순위가 필요한 이유는 말안해도 알겠지만.. 작업마다 중요도가 다르기 때문이다. 예를 들어, 하드웨어에서 요청하는 작업 같은 경우 다른 작업에 비해서 빨리빨리 처리를 해주어야 하므로.. 그리고 만약 우선순위가 낮은 스레드가 cpu를 사용 중인데, 더 중요한 작업의 요청이 올 경우 그 작업 부터 실행하는게 선점형이다. 그럼 이제 우선 순위에 관련된 얘기를 좀 해보자. 스레드 우선순위..

윈도우 ETHREAD와 KTHREAD 구조

커널모드에 있는 ETHREAD와 유저 모드에서 돌아가는 KTHREAD에 대해서 한번 알아보겠다. 스레드 구조체는 ETHREAD에 정의 되어 있는데, Windbg에서 dt _ETHREAD, dt_KTHREAD를 입력하면 구조체에 대한 정보를 알 수 있다. ETHREAD에서 알 수 있는 주요 정보는 아래와 같다. 그럼 이제 Windbg로 전체 구조체를 확인해보자. Tcb : 스레드 동기화 개체 CreateTime : 스레드 생성 시간 ExitTime : 스레드 종료 시간 PostBlockList : 현 스레드가 참조하는 모든 오브젝트 목록 Cid : 프로세스와 스레드 id 확인 가능 IrpList : 현 스레드에서 실행중인 IRP 리스트 StartAddress : 실제 스레드 시작 주소 Win32StartA..

윈도우 EPROCESS와 KPROCESS 구조

EPROCESS 와 KPROCESS 구조체에 대해 한번 공부해봅시다. 프로세스는 무조건 이해해야한다. 우리가 운영체제를 이용하는 이유는 무엇인가.. 작업을 하고자 함이다. 게임을 하든 문서를 작성하든 인터넷을 이용하든 이 모든 것들을 작업이라고 통칭 가능하다. 작업들을 하기 위해서 우리는 응용 프로그램들을 사용한다. 이 응용 프로그램들이 프로세스 그 자체라는 말 프로그램들을 실행시키고 관리하는게 프로세스다. 그리고 프로세스에서 실질적으로 작업하는 것은 스레드라고 했으니, 프로세스와 스레드에 대해서는 개념을 잡고 있는 것이 필요하다. EPROCESS를 통해 알 수 있는 정보들은 참으로 방대하다. 이를 통해 알 수 있는 주요 정보를 한번 알아보자. 그럼.. EPROCESS의 전체 구조체를 한번 보겠다. 필요..

Windbg 명령어 - dt(display type)

Windbg를 쓰다보면 제일 많이 쓰이는 명령이다. 구조체에서 해당 정보를 확인할 때 쓰인다. 지역 변수값, 전역 변수값, 데이터 타입과 구조체 등 많은 정보를 확인할 수 있다. 사용 옵션은 다음 과 같다. dt [-DisplayOpts] [-SearchOpts] Address/[module!]Name [-l List] [-SearchOpts] DisplayOpts은 필수는 아니지만, 출력 내용을 조절할 수 있다. 사용할 수 있는 옵션은 다음과 같다. -a[갯수] : 함께 지정한 구조체에 대한 정보의 표시 갯수를 지정한다. 갯수 지정하지 않을 시 전체를 출력 -b : 하위 구조체가 있으면 그 정보도 같이 출력한다. -c : 하나의 라인으로 구조체를 표시한다. -d : 구조체 이름과 비슷한 구조체를 함께 ..

윈도우 프로세스와 스레드 생성과 동작 원리

위 그림은 위 그림은 커널 동작 과정이다. 첫 과정인 프로세스와 스레드 관련 내용을 알아본다. 프로세스와 스레드는 작업을 처리하는 기본 단위들이다. 프로세스와 스레드의 관계에 대해 짚고 넘어가면, 우리가 실제로 하는 작업을 실행하는 것이 스레드이다. 작업의 주체라 이 말. 그리고 작업의 주체인 스레드를 위해 구성된 하나의 환경을 프로세스라고 보면 된다. 하나의 환경 즉, 프로세스에 작업의 주체인 스레드가 각자의 역할에 맞게 구성되어 있다.. 라고 정리하면 될것 같다. 우리가 윈도우에서 보는 프로세스는 하나의 응용 프로그램. 즉, 하나 이상인 스레드의 집합을 말한다. 이런 프로세스는 종류가 4가지가 있다. 1. 시스템 프로세스 커널에서만 실행되는 시스템 스레드들을 호스팅하는 프로세스로서, Ntoskrnl...

반응형