목록C (3)
Creative Motive
from : http://blog.naver.com/kkan22/80050056044 앞 항에서 Add 함수의 어셈블리 코드를 통해 스택 프레임의 실제 모양을 확인해 보았다. 인수는 뒤쪽부터 순서대로 전달하며 인수 전달에 사용한 스택 영역은 호출원이 정리했는데 이는 C/C++ 언어의 기본 호출 규약인 __cdecl의 스택 프레임 모양일 뿐이다. 호출 규약이 바뀌면 스택 프레임의 모양과 관리 방법도 달라질 수 있다. 호출 규약은 호출원과 함수간의 약속이므로 양쪽이 다른 형태로 약속을 할 수도 있는 것이다. 그렇다면 __cdecl이 아닌 다른 호출 규약은 어떻게 스택 프레임을 작성하는지 차이점을 분석해 보자. 호출 규약에 따라 인수를 전달하는 방법과 스택의 정리 책임, 함수의 이름을 작성하는 방법이 달라진다..
from : http://blog.naver.com/kkan22/80056919675 #pragma pack(push, 1) packing의 줄임말입니다. 보통 운영체제나 머쉰에 따라 기본적으로 데이터를 처리하는 것이 조금씩 다릅니다. 그중에서 struct 라고 하는 구조체가 대표적인 예입니다... 예를들어 struct _tagMyRecord { char a; int b; }; 라는 구조체가 있다고 할때 OS는 4로 Packing되어 있다면 char a; // 4바이트 int b; // 4바이트 해서 8바이트가 됩니다... Packing을 1로 해줄경우에는 char a; // 1바이트 int b; // 4바이트 해서 5바이트가 됩니다... 이기종간 통신이나 OS가 다른 PC간에 통신을 할때... 1로 P..
from : http://blog.naver.com/kkan22/80062806454 윈도우즈 환경에서 쓰려고 그런 것 같은데 Base64 인코딩의 원리는 간단하므로 어떤 컴퓨팅 환경이던 원리만 알면 누구나 쉽게 코딩할 수 있으리라 생각된다. Base64 인코딩 원리 우선 제목이 말하는 Base64의 의미가 무엇인지 살펴 보자. 베이스가 64라는 것은 모든 정보를 64진수로 표시한다는 것인데, 컴퓨터는 2진수를 사용하므로 64진수로 표시하기 위해서는 2^6 = 64 즉 6 비트 2진수 열이 필요하다. 그런데 대개 컴퓨터에서 가장 기본이 되는 정보 단위는 8 비트씩 엮어진 바이트이므로 6비트와 8비트가 각각 나누어 떨어질 수 있는 공배수의 최소값 (최소 공배수)를 구하면 24비트가 된다. 24비트는 8비트..