인디안 보호구역

[Assembly] Assembly Language란? - 1강 강의노트 본문

Study/Reversing 공부하는 인디안

[Assembly] Assembly Language란? - 1강 강의노트

Indie-An 2017. 5. 30. 17:12

 - 강의 대상 : 어느정도 C언어에 지식이 있는 사람 (포인터 정도는 이해하는 사람)


기계어란? CPU들이 이해할 수 있는 언어,

cpu도 종류가 많음 // intel, arm 등

cpu에 어떤 전기 신호를 보내면 어떻게 작동하고 이런걸 정해놨는데 그 전기 신호를 0과 1로 표현한 것이 기계어.


ex. 


x = 10+2, 

y = x+4


를 기계어로 번역하면


001001 11101 11101 1111111111111000

001000 00001 00000 0000000000001010

001000 00001 00001 0000000000000010

101011 11101 00001 0000000000000000

001000 00010 00001 0000000000000100

101011 11101 00010 0000000000000100

001001 11101 11101 0000000000001000


알아보기 힘듬. 이러한 기계어를

알파벳 단어 기호 숫자로 바꾼 것이다.

기계어를 어셈블리어로 바꿔주는 것을 어셈블러 라고 한다. 컴파일러처럼.


종류가 많음. masm도 있고 nasm도 있고 gas도 있고.

c언어와 다르게 어셈블러는 기계어를 명령어 셋에 따라서 어셈블리어로 바꿔주는 것이기 때문에

지시어도 다 다르고 하기 때문에 어셈블러를 이용해 공부하진 않는다.


그래서 디버거를 사용하여 순수하게 어셈블리어만 배울 것

ollydbg를 사용함.

이거 항상 관리자 권한으로 켜야 하는데

속성 - 호환성에서 관리자권한으로 항상 실행 체크해놓자.




2강


주로 intel 32bit 어셈블리어에 대해서 공부할거임. ia32라고 부름.

문법도 여러가지가 있지만 at&t가 아니라 intel꺼 배울거임


명령어(OpCode, operation)가 있고, 피연산자(operand)가 있음.

컴퓨터에게 '무엇을 해라' 라고 요구할 때

무엇을 == 피연산자, 해라 == 명령어 임


올리디버거로 파일 열어보자



처음엔 비어있는 실행파일을 열어보자.

아저씨가 파일 링크 줌.


코드 부분 더블클릭하면 수정할 수 있음.


RETN 으로 되어있는거 mov eax,1로 바꾸셈

mov eax,1은 eax = 1임.


앞의 mov가 operator(연산자, operation code)이고 eax와 1은 둘 다 operand임.

어셈블리어는 하드웨어랑 가장 근접한 언어이기 때문에

하드웨어를 좀 알아야함.


cpu : 연산은 cpu에서 일어남, cpu 내부에도 저장을 위한 공간이 있는데 register라고 부름. 읽기 쓰기 속도가 가장 빠름. 용량 졸라작음.

ram : 프로그램은 램에 적재됨. 그래서 데이터를 쓰거나 읽을 때는 램에서 쓰거나 읽고, 직접적으로 더하거나 뺄 때는 레지스터에 올려서 함.


레지스터는 범용 레지스터라고 하는 것이 있는데

eax, ecx, edx, ebx, esp,ebp , esi, edi, eip 등등이 있음. 이건 intel에서 정해놓은 이름임.


실행시키려면 step over를 누르면 됨. f8임 ollydbg의 기능임

다시 하려면 restart 하면 됨. ctrl f2임


실행해보면 eax 값이 변한 걸 알 수 있음.

Comments