목록분류 전체보기 (427)
안 쓰던 블로그
5d chess with multiverse time travel 하는 법 목차 0. 서론 1. UI 1-1. 현재 1-2. 보드와 시간의 흐름 화살표 1-3. 과거 2. 기물 2-1. 폰 2-2. 나이트 2-3. 비숍 2-4. 룩 2-5. 퀸 2-6. 킹 2-7. 유니콘 2-8. 드래곤 0. 서론 안녕하세요 5D 체스를 구매하셨군요! 어렵지만 재밌는 5차원 체스에 입문해 봅시다 한국어로 된 가이드가 없어서 저도 처음 보고 이게 뭔 소리인가 많이 헤맸어서 한국어로 가이드가 하나 있으면 좋겠다 싶은 마음에 적어봅니다 이 글은 다음 가이드(gameplay.tips/guides/8165-5d-chess-with-multiverse-time-travel.html)를 재해석하여 번역한 글임을 미리 밝힙니다 게임은..
SET 1부터 45까지의 수 중에서 숫자 6개를 선택해서 표시(중복안됨) - random.randint( ) : 난수 생성 집합 set을 이용해서 구현할 것 - Len( ) : 생성된 집합 개수 확인 - add( ) : 집합에 요소 추가 생성된 번호를 오름차순 정렬해서 표시하기 - sorted(변수명) : 오름차순 정렬 - sorted(변수명,reverse=True) : 내림차순 정렬 import random lotto=set() while len(lotto) < 6: lotto.add(random.randrange(1, 46)) #set이라 그냥 randrange(1, 46)하고 넣어도 알아서 중복제외 print("pick list : ",end=""); print(lotto) print("sorted..
x86에서 x64가 되면서 구조 뿐만 아니라 스택에도 변화가 생겼다 레지스터 사용법 변화 1) 레지스터 이름 및 크기 변화 EAX(4바이트)->RAX(8바이트) EBX(4바이트)->RBX(8바이트) EBP(4바이트)->RBP(8바이트) 앞에 e가 붙으면 x86의 레지스터(32비트), r이 붙으면 x64의 레지스터(64비트)이다 그리고 e~는 4바이트, r~은 8바이트이다 x86에서 x64가 되면서 레지스터 이름과 크기가 변화했기 때문인데, 그렇기 때문에 e~가 사용되지 않는 건 아니다. eax라는 건 rax 레지스터의 하위 4바이트를 의미하는 이름이라고 알면 된다 2) 새로운 레지스터 추가 x86에서는 없던 레지스터 R8, R9 ... R15가 추가되었다 이 중에 R12~15는 비휘발성 레지스터(Non-..
전에 리버싱 공부하면서 레지스터를 정리한 적이 있다 foxtrotin.tistory.com/266 다시 기억할 겸 정리 레지스터는 CPU 내부에 존재하는 작고 고속인 다목적 메모리이다 종류로는 범용, 세그먼트, 상태 플래그, 명령 포인터 등등.. 이 있다 범용 레지스터는 논리, 수리 연산에 사용되는 피연산자, 주소를 계산하는 사용되는 피연산자, 메모리 포인터가 저장된다 세그먼트 레지스터는 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트를 가리키는 주소가 들어 있다 (세그먼트?: foxtrotin.tistory.com/312) 플래그 레지스터는 프로그램의 현재 상태나 조건 등을 검사하는 데 사용되는 플래그들이 들어 있다 명령 포인터(인스트럭션 포인터)는 다음에 수행해야 하는 명령이 있는 메모리 상의 주소가..
스택 영역(스택 프레임) 프로그램 실행 중 만들어지는 지역변수나 매개변수가 쌓이는 메모리 공간 (참고: 메모리 구조 foxtrotin.tistory.com/312 ) 특징 리틀 엔디안 방식으로 저장되므로 하위 바이트부터 먼저 들어간다 스택 기본 구조 Buffer + sfp[4byte] + ret[4byte] 1) 버퍼는 데이터가 저장되는 공간이다 2) sfp는 스택 베이스값을 뜻한다 sfp는 스택 주소값을 계산할 때 현재 스택값의 기준을 잡을 때 필요한 프레임 포인터 값을 저장한다. 크기는 4바이트이다 sfp가 필요한 이유 ebp레지스터는 한 개이기 때문에 함수가 시작할 때마다 ebp값이 바뀌는데 그 전의 ebp값을 스택에다가 저장해야 하기 때문이다 3) ret 은 return의 약자로 반환 주소값을 뜻..
1. 코드(텍스트) 영역 유저가 작성한 소스코드가 들어가는 영역, 실행할 프로그램의 코드가 바이너리화 되어 저장된다 이곳의 명령 실행 순서는 순차적이지 않다. 왜냐하면 하이레벨 언어 구조가 jump, call 등을 많이 쓰기 때문이다 그래서 순서를 맞추기 위해 EIP 레지스터를 이용한다 EIP 레지스터는 다음에 실행할 명령의 메모리 주소가 저장되어 있는 레지스터로, 현재 실행 중인 명령어가 종료되면 프로세서는 자동으로 EIP 레지스터에 저장된 명령어를 실행한 뒤에 그 다음 명령어를 EIP에 저장한다 프로그램이 실행되면 EIP 레지스터는 코드 영역의 맨 처음 위치로 설정된다 이곳에는 진짜 코드만 저장하고 있기 때문에 쓰기가 금지되어 있다. 읽기만 가능하다 2. 데이터 영역 초기값이 있는 전역(global)..
정치학개론 수업 중 여담으로 나온 내용.. 교과서에서 배운 건 다 의미 없어 보인다. 그런데도 배워야 하는 이유는 뭘까? 교과서라는 것은 인류가 앞서 축척해 놓은 지식, 관습들을 배우는 것이고, 그런 것들이 이해가 되어 있어야 서로 간의 커뮤니케이션이 가능하기 때문에 배우는 것이지 반드시 그대로 실천하라고 가르치는 게 아니다. 경우에 따라 교과서적으로 실천하는 것이 사회 공동체를 위해서, 평화를 위해서 좋지만 현실적으로 보면 그렇지 않다. 미분적분을 쓰지 않는데 무엇하러 수학을 배우나? 그런 실용적인 것들만 생각한다면 수학은 덧셈, 뺄셈, 곱셈, 나눗셈만 배우면 된다. (사실 수학이라는 것은 세상의 원리를 숫자로 또는 도형으로 이야기하는 것이고 철학처럼 삶의 원리와 세상이 돌아가는 기본 구조를 설명하는 ..