메모리, 주소 접근 모드 1. 전역, 정적 변수 선언우리는 x86 어셈블리에서 전역 변수와 비슷한 static 변수 지역을 특별한 어셈블러 명령을 이용해서 선언할 수 있으며,이는 반드시 .DATA 세그먼트에 선언되어야 한다. (세그먼트와 관련된 내용은 추후 추가 예정) 생성할 수 있는 메모리의 크기로는 1, 2, 4bytes 이다.* signed / unsigned : 최상위 비트를 부호 연산으로 사용하는지의 유무DB - Byte : 1바이트 > -127 ~ 127(signed), 0~254(unsigned), ASCII CharacterDW - Word : 2바이트 > -32767 ~ 32767(signed), 0~65534(unsigned)DD - Double Word : 4바이트 > word*wor..
1. 어셈블리 언어의 정의 (출처 : 위키백과)어셈블리 언어란, 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.컴퓨터 구조에 따라 사용하는 기계어가 달라지게 되며(ARM, MIPS), 이에 따라 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 어셈블러는 니모닉 기호(mnemonics -> ex> ADD eax, 1 에서의 ADD와 같은, 사람이 보기 쉽게 만든 언어를 말한다.)를 opcode(Operation Code -> 기계어의 일부로, 수행할 명령어를 나타내는 부호를 말함.) 로 변환하고, 메모리 위치와 기타 존재물에 따라 식별자를 다시 분석함으로써, 목적 코드(실행될 수 있는 기계어 코드) 를 만들어낸다. 2. 레지스터 (범용)x86 기반 CPU는 8개의 범용 레지스터..
어쩌다가 발견한 거라 남겨 둠. 다음은 http://reversing.kr 에서 출제한 Easy_CrackMe 파일의 어셈블리 코드 중 일부이다. 1. Ollydbg 2. IDA 먼저 올리디버거 에서는 일반적으로 표시하듯이 ESP + n 형태로 메모리 주소를 가리키고 있는데, IDA 에서는 ESP + 현재 스택 포인터 + var_? 형태로 표시하고 있다. 언뜻 보기에 왜 저렇게 표시했을까 싶은데, IDA 에서 자동으로 스택의 사용을 조사해서 지역 변수를 찾아내는데 용이하게 만든 것이다.IDA의 디스어셈블러 화면 시작 부분을 보면 이렇게 var_? 형태로 특정 값이 설정되어 있는데, 이는 함수 시작 시EBP 의 주소를 기준으로 스택 상에 변수가 위치하는 오프셋 값이다. String, var_63, var_..