일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- go
- 연결리스트
- 알고리즘
- 프로그래밍
- C언어
- 백준
- C++ gui 라이브러리
- 리듬게임
- OS
- tour of go
- 운영체제
- 공룡책
- JUCE library
- C++
- JUCE라이브러리
- a tour of go
- vim-go
- go channel
- BOJ
- 자료구조
- c++ heap
- LOB
- Nebula
- 코딩
- Docker
- JUCE
- C++ library
- gui
- JUCE 튜토리얼
- C++ gui
- Today
- Total
목록Programming/Assembly (4)
CafeM0ca
레지스터는 프로세서의 작동을 빠르게 하기위한 것으로 프로세서는 여러개의 내부 메모리 로컬 저장소를 포함하고있다.레지스터는 메모리 접근없이 작업하기위해 데이터 요소를 저장한다. 레지스터는 프로세서당 제한된 갯수의 칩이 있다. Processor Registers32비트 10개, 16비트 6개 프로세스 레지스터가 IA-32 아키텍쳐에 있다. 이 레지스터들은 3개의 카테고리 그룹으로 나뉜다. -일반 레지스터-컨트롤 레지스터-세그먼트 레지스터 일반 레지스터는 3개의 그룹으로 나뉜다.-데이터 레지스터-포인터 레지스터-인덱스 레지스터 Data Registers
어셈블리 프로그램의 3개의 영역에 대해 이미 논의했었다. 3개의 영역은 나타낸다 다양한 메모리 세그먼트를.흥미롭게도, 만약 대체하면 영역 키워드를 세그먼트로, 같은 결과를 얻을 수 있다.다음 코드를 따라쳐보자.실행결과: Hello, world! Memory Segments분할된(segmented) 메모리 모델은 나뉜다 시스템 메모리로 독립적인 세그먼트의 그룹으로 참조된다. 포인터들이 위치된곳에 의해 세그먼트 레지스터들 안에서.각각의 세그먼트는 사용된다 포함하기 위해 지정된 타입의 데이터를. 하나의 세그먼트는 사용된다 포함하기 위해 명령 코드들, 또다른 세그먼트를 저장한다 데이터 요소를, 그리고 세번째 세그먼트는 유지한다 프로그램 스택을. 위 내용에 비추어 볼때, 우리는 지정할 수 있다 변하는 메모리 세그..
어셈블리 프로그램은 3개의 영역으로 나뉜다.- 데이터 영역- bss 영역- 텍스트 영역 The data section데이터 영역은 사용된다. 초기화 선언된 데이터나 상수들로. 이 데이터들은 런타임때 바뀌지 않는다.선언된 값들로 상수 값이나 파일 이름, 버퍼 사이즈 등 정의할 수 있다. 데이터 영역을 선언하는 구문은 다음과 같다.section.data The bss Sectionbss 영역은 사용된다. 변하는 변수들로. bss 영역을 선언하는 구문은 다음과 같다.section.bss The text sectiontext 영역은 실제 코드를 유지하는데 사용된다. 이 영역은 반드시 global _start와 함께 시작되어야 한다. 이것은 커널에게 말한다. 프로그램 실행 시작점이 어딘지.section.textg..
CTF를 한번 참가했었는데 착하게 LOB처럼 소스코드를 주지는 않는다.덕분에 처음 본 문제가 python으로 코딩한 문제로 알고있다.죽어라 gdb로 disas main했지만 안나오는게 당연했었다.(main함수없고 init함수가 있더라) 이야기가 삼천포로 빠졌는데 어쨌든 실행파일 바이너리만 달랑주기 때문에 어셈블리 명렁어를 통해 프로그램의 실행 로직을 잘 파악해야 한다. push - 스택에 메모리를 집어넣는다. 32비트면 4바이트, 64비트면 8바이트pop - 스택 최상단에서 메모리를 뺀다. (pop eax - 최상단에서 뺀 메모리값을 eax에 저장)mov - 주소를 복사한다. (mov dest scr - dest에 scr을 복사) lea - 주소값을 복사한다.(lea 레지스터 주소 - 레지스터에 주소값을..