전체 글 173

내가 해킹을 좋아하는 이유 (2022)

고등학생때 강연으로 매주 뵙던 교수님이 해주신 말씀을 아직도 기억한다. “해킹이란 남들이 모르는 것들에 대해 깊은 호기심을 가지고 이를 알아내어, 세상을 이롭게하는 행위” 라고 말씀해주셨는데, 핵심은 남들이 ‘모르는’ 것들에 대해 탐구한다는 것이다. 여기서 남들이 모르는 것이란 공공연히 알려져있는 것들 말고 존재하고는 있으나 세상에 발견되어 드러나지 않은 정보(data)와 지식(knowledge)을 나타내는 것일테다. 예를들면 전쟁 중에 적국의 작전이나 원자력 발전소등 국가주요 연구시설에서 사용하는 설계도, 누군가의 개인정보, 아직 발견되지않은 과학적 사실 심지어는 미래의 비트코인 차트까지도 ‘남들이 모르는 것’이라고 표현할 수 있을 것이다. 해킹을 공부하다보면 관통하는 생각이 “이거 하려면 어떻게 해야..

일기 2022.04.12

우분투에서 파이썬 버전 변경하는 방법 (/usr/bin/python /usr/bin/python3)

들어가기전에 알아두면 좋을 것은python과 python3는 엄연히 다른 명령어다.둘을 구분해서 생각하는게 좋다.(일반적으로, python -> python2.X / python3 -> python3.X) 0. 파이썬 버전 및 설치위치확인python 버전 및 설치위치확인python -Vwhich pythonls -al /usr/bin/pythonpython3 버전 및 설치위치확인python3 -Vwhich python3ls -al /usr/bin/python3설치된 모든 파이썬 버전 확인ls /usr/bin/ | grep python 1. 필요한 파이썬 버전 설치sudo apt install python3.Xsudo apt install python3.9 2. 파이썬 버전 등록 (update-altern..

MOV와 LEA 어셈블리어 차이 그리고 []의 의미 (RAX와 [RAX]의 차이)

결론부터 이야기하면 mov는 값을 옮기는 어셈블리어 lea는 주소를 옮기는 어셈블리어 rax는 rax에 담긴 값 [rax]는 rax에 담긴 값을 주소로 보겠다. 라는 뜻이다. 아래 표를 완벽하게 이해하면 최고다. 1. mov rdi, rsi : rsi에 있는 값을 주소가 아니라 값으로 보고, rdi 레지스터에 값을 넣는다. 2. mov QWORD PTR[rdi], rsi : rsi에 있는 값을 주소가 아니라 값으로 보고, rdi 레지스터에 담겨있는 값을 주소로 보고, 해당 주소에 rsi에 담긴 값을 넣는다. 3. mov QWORD PTR[rdi+8*rcx], rsi : rsi에 있는 값을 주소가 아니라 값으로 보고, rdi값+8*rcx값을 주소로 보고, 해당 주소에 rsi에 담긴 값을 넣는다. [ ]의 ..

공부/JUN STUDY 2022.03.30

BSS vs 데이터 vs rodata (전역영역 이름 구분하기)

BSS / 데이터 / rodata 세그먼트 모두 전역변수/상수가 저장되는 위치이다. 일단 이거는 머리에 넣어두고 다만 어떤 전역변수/상수가 저장되느냐 인데, 이 글을 통해 살펴보자. 각 세그먼트마다 머리에 넣어두면 좋을 내용을 먼저 정리해보면 BSS 세그먼트 : 프로그램 시작시 모두 0으로 초기화됨 => 선언하고 초기화 하지않은 전역변수 데이터 세그먼트 : 프로그램 시작시 0으로 초기화 안됨 => 초기화된 전역변수/전역상수가 위치하는 영역. rodata 세그먼트 : 데이터 세그먼트 안에 수정 불가능한 영역 => 값이 변하면 안되는 데이터가 위치함. (문자열 / 전역상수) 자 조금만 생각해보자. 전역변수를 선언하고 초기화를 하지 않았으면 프로그램을 실행하는 도중에 변수에 값을 넣어주는 과정이 필연적으로 있..

공부/JUN STUDY 2022.03.30

메모리 vs 레지스터 (메모리가 있는데 레지스터 왜 또 쓸까?)

우선 메모리나 레지스터의 사용목적은 같다. 컴퓨터에 데이터를 저장하기위해 이건 머리에 박아놔야한다. 다만 좀 더 빠르고 효율적으로 데이터를 저장하고 사용하기위해 레지스터를 사용하는 것이고, 이에 대해 이론적으로 구체적으로 알고싶으면 컴퓨터구조 내지는 운영체제 과목의 메모리 계층(Memory Hierarchy) 개념을 공부하면 된다. 이 글은 포너블 내지는 프로그램 동적 디버깅을 할때 메모리랑 레지스터 헷갈리지 않기위해 적는 글이다. 우선 알아두면 좋을 전제들이 몇개있다. 1. 프로그램에서 데이터를 다루는 주체는 CPU이다. (따라서 프로그램 명령어. 그러니까 어셈블리어에 있는 데이터들은 다 CPU가 다루는거다.) 2. CPU가 데이터를 사용하기위해선 무조건 레지스터로 옮겨와야한다. (push / pop은..

공부/JUN STUDY 2022.03.30
728x90