본문 바로가기

정상을향해48

IA-32 Register 출처 : www.reversecore.com Register란? Register란 CPU 내부에 존재하는 저장공간이다. CPU가 RAM에 있는 데이터를 액세스 하기 위해서는 먼 길을 돌아가야 한다. 하지만 레지스터는 CPU와 한 몸이기 때문에 고속으로 데이터를 처리할 수 있다. 단, 가격이 비싸고 용량이 작으며, CPU 아키텍쳐와 밀접한 연관이 있어서 그 개수와 크기를 변경할 수 없다. (변경하려면 CPU 아키텍쳐 자체가 변경되어야 한다.) IA-32 Registers IA-32는 최신 CPU인 만큼 지원하는 기능도 많다. 따라서 그만큼 레지스터도 많이 가지고 있다. Basic program execution registers x87 FPU registers MMX registers XMM registe.. 2013. 11. 10.
[ASM] 어셈블러 : 범용 레지스터 EAX(Accumulator) : 오퍼랜드와 결과 데이터용의 누산기(accumulator) EBX(Base Index) : DS 세그먼트내의 데이터에 대한 포인터 레지스터 ECX(Count) : 문자열 처리 및 루프(loop) 제어용 카운터 EDX(Data) : I/O 포인터 ESI(Source Index) : DS 세그먼트내의 데이터에 대한 포인터 레지스터 EDI(Destination Index) : ES 세그먼트내의 데이터(또는 목적지)에 대한 포인터 ESP(Stack Pointer) : SS 세그먼트내의 스택 포인터 EBP(Base Pointer) : SS 세그먼트내의 스택 포인터 2011. 5. 16.
[C] 포인터 : 배열명 배열명은 그 자체가 주소를 의미한다. int temp[3] = {1, 2, 3}; int *temp_p; 위와 같은 정의가 있을 때, for(i = 0; i < 3; i++) printf("%d", *(temp + i)); // 1번식 for(i = 0; i 2011. 4. 16.
[C] 포인터 : *의 의미 int temp = 0; int *temp_p; temp_p = &temp; *temp_p = temp; printf("temp_p = %d, *temp_p = %d", temp_p, *temp_p); 포인터 변수를 정의할 때의 '*'와 수식에서 사용할 때의 '*'는 다른 의미가 있다. 정의할 때 사용하는 '*'는 주소를 저장할 수 있는 변수를 할당 받는 것이고 수식 내에서 사용된 '*'는 변수에 대한 역참조(dereferencing)를 한다는 의미이다. 이는 역참조 연산자(dereferencing operator)라고 따로 부른다. #include int main() { int *temp_p; *temp_p = 1024; // Segmentatiion Fault 발생 printf("%d\n", *tem.. 2011. 4. 16.