본문 바로가기

Reversing/Assemble7

[ Assemble ] 어셈블리어 변수 선언 & 레지스터 데이터 어셈블리 프로그램을 작성한다는 것은 CPU가 지원해주는 각종 연산 기능들을 이용해서 레지스터나 메모리에 데이터를 저장한다는 것이다. sasm 을 이용하여 변수를 선언하고, 레지스터에 데이터를 복사해보자. 가장 헷갈렸던 부분이 여기다. eax와 ax에 0x1234를 저장하고, mov ax, eax 를 실행했을 때 에러가 난다. 32비트 짜리를 16비트에 억지로 집어넣으려고 하니까 탈이 난거다. 이 부분을 주의하도록 하자. 어셈블리 변수 선언 어셈블리에서 변수는 메모리의 시작 주소와 사용되는 메모리의 크기를 의미한다. 변수는 다음과 같은 정보를 지닌다. 시작 주소 저장 되어 있는 값 사용하는 데이터의 크기 > 데이터의 크기 지시어 타입 설명 byte 8비트 정수 word 16비트 정수 dword 32비트 정.. 2020. 4. 11.
[ Assemble ] 어셈블리어 출력, add 연산, imul 연산실습 어셈블러는 SASM을 이용했다. 실습을 하기 위해 새로운 프로젝트 파일을 하나 생성해보겠다. ctrl+n 키를 눌러 새 파일을 생성한다. 파일을 새로 생성하면 나와 같이 뜨지 않을 수도 있다. 그렇지만 공통적으로 section .text 밑에 코드를 쓰고, global CMAIN CMAIN: 와 같은 (다른 언어에서의 main()과 같은 존재) 문자 밑에서부터 프로그래밍을 할것이다. 안에 기본적으로 xor 과 ret 이라는 연산이 보인다. xor 연산은 둘이 같으면 0, 다르면 1 을 반환해주는 연산자이고 ret 은 C 에서의 return 과 같다. main 마지막 부분에 return 0; 를 해주는 것이라 이해하면 쉽다. 어셈블리어에서는 레지스터라는 개념이 빠질 수 없다. 다음 포스팅은 우리가 어셈블리.. 2020. 3. 31.
[ Assemble ] 어셈블리어 개요 & SASM 설치 어셈블리어란? 어셈블리어란 C나 JAVA 와 같은 사용자와 가까운 고급언어보다 기계어와 더 가까운 언어이다. 기계어와 명령어가 1:1로 대응하고, 이 기계어는 CPU 종류에 따라 달라지기 때문에 호환성이 없는 언어이다. 주로 임베디드나 커널 프로그래밍 등에 쓰인다. 어셈블리어의 특징 동일한 종류의 프로레서만 실행된다. 프로세서에 대한 사전지식이 필요하다. 메모리나 입출력장치, 레지스터 등의 구성요소를 직접 다룰 수 있다. 컴퓨터에서 실행하는 과정등을 이해하기 쉽다. 고급언어의 특징 프로세서 종류 상관X -> CPU의 종류가 달라도 코드에 지장없다. 프로세서에 대한 사전 지식이 필요없다. 문법이 비교적 간단하고 이해하기 쉽다. 코드 양이 적고 디버깅이 용이하다. 컴파일러 VS 어셈블러 - 컴파일러 고급언어.. 2020. 3. 31.