IT 그리고 정보보안/Knowledge base 227

파이썬에서 객체 복사 (copy, deepcopy)

파이썬에서 객체의 복사에는 두가지 종류가 있다. 참조 복사와 실제 객체 복사. 참조 복사는 이전에 언급했었던 레퍼런스 카운트가 증가하는 복사이다. 주소만 복사한다는 말. 그냥 같은 값을 참조하도록 하는 것이다. 다음 실제 객체 복사. 이거는 종류가 두가지 있다. 얕은 복사, 깊은 복사 얕은 복사 - 객체 값 자체를 복사하되 원래 레퍼런스로 채우는 것. (참조복사는 그냥 같은 곳을 참조만 하는거) 깊은 복사 - 아예 새로 만들어 내용도 새로 채운다. 둘다 copy 모듈을 이용하여 한다. copy.copy() 얕은 복사 copy.deepcopy() 깊은 복사

파이썬 문자열 활용

문자열 포매팅(Formatting) 일종의 문서 양식을 만드는 것이다. 포맷 스트링을 이용하여 변동하는 부분을 대신함. %d %x 등으로 숫자도 표현가능. 튜플을 이용해서 문자열 포매팅을 한 것인데, 아래는 튜플을 이용해서 한 것임. 더 많은 방법이 있는데, 필요할 때 찾아서 할 생각. 많이 중요하다 여기지 않음. 문자열 메소드 백문이 불여일견이다. 먼저 대소문자 변환에 관한 메소드 문자열 검색에 관한 메소드 편집, 치환에 관한 메소드 가장 많이 쓰이는 분리, 결합 메소드이다. 정렬에 관련된 메소드 (아.. ㅠ 왜케 많음...) 마지막! 문자열 구성 요소 검사 메소드! 상기의 문자열 활용에서 나온 것들은 파이썬 내장 함수들을 사용한 것이었는데, 이번에는 string 이라는 파이썬 모듈을 임포트 시켜서 그..

파이썬 함수와 제어문

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의 전체 구조체를 한번 보겠다. 필요..

반응형