일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 자료구조
- 운영체제
- a tour of go
- 공룡책
- gui
- OS
- JUCE 튜토리얼
- tour of go
- 코딩
- C++ library
- JUCE라이브러리
- c++ heap
- C언어
- Docker
- 알고리즘
- go channel
- LOB
- Nebula
- C++
- JUCE library
- go
- 리듬게임
- JUCE
- 프로그래밍
- 연결리스트
- vim-go
- 백준
- C++ gui
- C++ gui 라이브러리
- BOJ
- Today
- Total
CafeM0ca
[어셈블리]어셈블리 명령어 기본 본문
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 레지스터 주소 - 레지스터에 주소값을 복사)
sub - 빼기
add - 더하기
jmp - 해당 주소로 이동.(call은 복귀주소를 설정함)
call - 함수를 호출한다.(call이 호출되기 전에 인자를 받는다. 인자는 뒤에서부터 스택에 저장된다. ex) strcpy(dest,scr)이 있으면 push scr, push dest, call strcpy가 된다.)
xor - 두 비트가 같으면 0 다르면 1으로 계산한다.(ex: 여러 예시가 있지만 같은 레지스터끼리 xor연산을 해주면 0으로 초기화된다. mov로 레지스터 , 0 해줘도 되지만 xor가 효율면이 더 좋다고한다.)
leave - 스택프레임을 정리해준다. (leave는 mov esp,ebp pop ebp)
ret - 다음명령을 실행 (pop eip jmp eip)
'Programming > Assembly' 카테고리의 다른 글
[Assembly]tutorial registers (0) | 2018.03.26 |
---|---|
[Assembly]튜토리얼 Memory Segments (0) | 2018.03.26 |
[Assembly]튜토리얼 Basic Syntax (0) | 2018.03.25 |