본문 바로가기

분류 전체보기

(426)
divmod & packing & unpacking 파이썬을 파이썬답게 def answer(mylist): answer = [] for i in mylist: answer.append(len(i)) return answer def solution(mylist): return list(map(len, mylist)) 용어 정리 -Iterable : 자신의 멤버를 한 번에 하나씩 리턴할 수 있는 객체. list, str, tupe, dict...등이 여기에 속한다. -sequence : int 타입의 idx를 통해, 원소에 접근할 수 있는 객체로 Iterable의 하위 카테고리 list, str, tupe이 여기에 속한다. 몫과 나머지 - divmod 알고리즘 문제를 풀다 보면, 정수를 나눈 몫과 나머지를 구해야 할 때가 있다. 정수 a,b가 있을 때 보통 ..
Stack Stack 스택 자료를 보관할 수 있는 선형 자료구조 단, 넣을 때에는 한쪽 끝에서 밀어 넣어야하며 꺼낼때에도 같은 쪽에서 뽑아 꺼내야 한다. push & pop 후입선출 (LIFO - Last In First Out ) 구조 스택의 주요 연산은 push & pop 뿐인 간단한 자료구조이지만, 여러 가지의 알고리즘을 구현함에 있어 활용도가 높다. 예를 들어, 프로그램 내부에서 함수 호출이 일어나고 함수들이 리턴하면 마지막 호출 위치로 돌아가는 동작을 구현하는데도 스택이 이용된다. 스택에서 발생 가능한 오류 비어있는 스택에서 pop 시도 -> 스택 언더플로우 스택이 꽉 차있는 상태에서 push 시도 -> 스택 오버플로우 스택의 추상적 자료구조 구현 (1) 배열 (array) 를 이용하여 구현 - Pytho..
Doubly Linked Lists
__str__ 과 __repr__ 0.__str__과 __repr__ 1. 개요 파이썬에서 매우 자주 쓰이고 은근히 햇갈린느 두 메소드에 대해 다뤄본다. __str_ 과 __repr__로써 이 둘은 객체를 사용자가 이해할 수 있는 문자열로 반환하는 함수다. 2. 이해 2.1 str, __str__ ''__str__'' 를 본적이 없더라도 str 함수는 많이들 접해봤을 것이다. 어떠한 일련의 작업 이후 정수 또는 소수 등의 자료형을 출력하거나, 병합(Concat)등의 작업을 할 떄 str 함수를 통해 많이들 가공하기 때문이다. str은 입력 받은 객체의 문자열 버전을 반환하는 함수이다. 이때 주요시 봐야하는 요점은 str은 내장 함수가 아니라, 파이썬 내장 클래스라는 것이다. 사실 str클래스의 생성자 메소드를 실행하고, 그 인자값을 전달..
Linked List Linked Lists ​ 기본적 연결 리스트 Node : Data + Link (next) 노드 내의 데이터는 다른 구조로 이루어질 수 있음 ex)문자열, 레코드, 또 다른 연결리스트…etc 리스트의 맨 첫 원소 : Head, 맨 끝 원소 : Tail, 노드의 개수 매우 중요! 자료구조 정의 Node : Data + Link(next) LinkedList class Node: def __init__(self, item): self.data = item self.next = None class LinkedList: def __init__(self): self.nodeCount = 0 self.head = None self.tail = None def getAt(self, pos): # 원소 위치 입력이 ..
ASPACK unpacking 문제를 풀다가 Aspack을 처음 접해서 해당 공부 내용을 남기고자 블로깅을 진행한다. 0x00. Packer 패커란 실행 파일 압축기를 의미한다, 정확한 명칭은 Run_Time Packer다. '실행 압축'이란 실행 파일에 실행 코드를 원본 형태로 두지 않고 압축을 진행한 것을 의미한다. 또한 압축해제 코드를 실행 파일에 같이 넣어놓은것이다. 따라서 프로그램이 실행될 대 먼저 압축해제 코드가 진행되서 원본 실행코드 압축이 풀리고 실행이되어진다. 0x01. 패커 사용 목적 패커의 사용목적은 크게 두가지로 나뉜다. 첫번째 사용목적은 실행 파일의 크기를 압축하여 줄이고자 하는 목적 두번쨰 사용목적은 PE 파일 내부의 코드, 소스 등을 감추기 위한 목적이다. 0x02. 언패킹 EXEINFO와 같은 툴을 통해 ..
Stolen Bytes Stolen Bytes Stolen Bytes란 훔쳐진 바이트란 의미로 프로그램의 한 부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드를 의미한다. 주로 옮겨지는 코드는 EP 위 몇개의 코드들이며 옮겨진 코드들은 OEP주소로 점프하기 전 위치에서 PUSH되어진다. 이부분의 명령어들은 이동된 곳 또는 할당받은 메모리 공간에서 실행되어진다. 만일, 보호된 프로세스의 메모리가 덤프 되었을 때 Stolen bytes를 복구하지 못한다면 덤프된 실행파일은 정상적으로 작동하지 않는다. POPAD와 jmp OEP 사이에 연속되어진 PUSH부분을 Stolen Bytes라고 한다. PUSHAD PUSHAD는 모든 Register를 Stack에 적재(push)하는 명령어이다. POPAD POPAD는 Stack에 백업되어있..
x86 그리고 x64 0x00. 개요 윈도우즈 PC에는서 프로그램등을 다운받을때 x86, x64버전이 표시되었던 것을 본적이 있을것이다. 두 버전 중 한 가지를 꼭 선택해야만 다음 단계로 넘어갈 수 있기에 의무적으로 하나는 선택을 해야했다. 과연이 두 버전에는 어떠한 차이가 있으며 무엇을 선택하는게 옳을까? 0x01. 32bit & 64bit 어떠한 것을 고를지 선택하기 위해서는 bit의 개념을 알아야 한다. bit란 Binary Digit의 약자이며 CPU가 처리하는 데이터의 최소단위의 크기가 몇 bit인지 에서 나온 단어로 숫자 0과 1 두 수 만으로 이루어진 숫자열을 의미한다. 여기서 왜 0과 1 두 수만 이용하는지에 대한 의문이 들 수 있다. 컴퓨터는 모든 데이터를 0과 1 을 이용한 이진법으로만 처리하기 때문이다. ..