CafeM0ca

[어셈블리]어셈블리 명령어 기본 본문

Programming/Assembly

[어셈블리]어셈블리 명령어 기본

M0ca 2017. 10. 23. 19:56
반응형

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
Comments