세그먼트 레지스터 ! Windows / Linux 에서 각각 사용 용도가 다른 것 같음. 나중에 다시 자세히 정리.! 세그먼트 레지스터는 과거 286 ~ 80386 시스템에서 사용되었으며, 현재는 거의 사용되지 않음.! In Real mode(??) -> Boundary(기준값) + Offset(세그먼트 레지스터 - 메모리 주소 시작과의 차이)로 액세스함. 세그먼트란?세그먼트란, 프로그램에 정의된 특정 영역으로, 코드, 데이터, 그리고 스택으로 알려져 있는 것을 포함한다.한 세그먼트는 패러그래프 경계(paragraph boundary), 즉 16(hex 기준)으로 나누어지는 위치에서 시작한다.세그먼트는 메모리의 거의 어느 곳이나 위치할 수 있고, 실제 모드에서 최대64kb(in x86)의 크기를 가질 수..
함수 호출 규약 _ 기본적인 함수 호출 + 간단한 스택 사용어셈블리에서의 기본적인 함수 호출 규약 예제 Caller Function int main(int argc, char* argv[]) { sum(1, 2); return 0; } .text:080483F8 public main .text:080483F8 main proc near .text:080483F8 .text:080483F8 argc = dword ptr 8 .text:080483F8 argv = dword ptr 0Ch .text:080483F8 envp = dword ptr 10h .text:080483F8 .text:080483F8 000 push ebp .text:080483F9 004 mov ebp, esp .text:080483F..
** 번역한 내용이 대부분임. 문서 하단에 출처 참조함. 명령어 - 데이터 이동 / 산술 및 논리 연산기계어는 주로 3가지 목표를 가진다. 1. 데이터 이동 / 2. 알고리즘, 로직 / 3. 프로그램 흐름 제어여기에서는, x86 시스템에서의 중요한 명령어를 예시를 들어 설명합니다.단, 여기서 나타내는 예제들은 완전한 x86 명령어들은 아니지만, 보편적으로 유용한 부분을 가지고 있습니다. 완벽한 예제들을 보려면, Intel에서 제공하는 명령어 예제들을 참고하면 됩니다. # 기호 표시 Any 32-bit register (EAX, EBX, ECX, EDX, ESI, EDI, ESP, or EBP)Any 16-bit register (AX, BX, CX, or DX)Any 8-bit register (AH, ..
1. 바이트 순서 _ Little Endian 과 Big Endian 엔디안이란? (일부 출처)컴퓨터의 메모리와 같은 1차워느이 공간에 여러 개의 연속된 대상을 배열하는 방법. 이 때,바이트를 배열하는 방법을 바이트 순서(Byte order)라 한다. 빅 엔디안은 최상위 바이트(MSB - Most Signficant Byte) 부터 차례로 저장하며,리틀 엔디안은 최 하위 바이트(LSB - Last Significant Byte) 부터 차례로 저장한다. 예를 들어, 메모리에 데이터를 저장한다고 가정해 보자. Double Word (4바이트) 형식의 데이터 0x 12 34 56 78을 메모리 주소 0x 00 00 01 00 에 넣는다.이 때, Big endian 과 Little endian의 데이터를 넣는 ..
메모리, 주소 접근 모드 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개의 범용 레지스터..