Low-Level Data Management

Development 2013. 2. 4. 00:15 posted by CecilDeSK
반응형

Low-Level Data Management


하이레벨 프로그래밍 언어와 프로그램의 로로우레벨 표현 사이의 가장 큰 차이점중 하나는 데이터 처리부분이다. 하이레벨 프로그래밍 언어는 데이터 처리에 대한 세부사항의 상당부분을 은닉한다. 물론 프로그래밍 언어마다 정도의 차이는 있을수 있다. ANSI C (다른 하이레벨 프로그래밍 언어에 비해서 상대적으로 로우레벨 언어에 가깝다고 인식되는)인 경우에도 뎅터 처리의 상당히 많은 부분이 외부로 노출되지 않는다. 

예를 들어 다음의 간단한 C언어 코드를 살펴보자.


int Multiply(int x, int y)
{
    int z;
    z = x * y;
    return z;
}

아주 간단한 위의 함수조차도 로우레벨 표현으로 곧바로 변환하지는 못한다. 대부분의 플랫폼에서 CPU는 변수를 선언하거나 두변수를 곱해서 값을 산출해내는 명령을 가지고 있지 않다. CPU에서 단일 명령의 복잡도 레벨은 하드웨어적인 제한과 성능적인 고려에 의해서 결정된다. 인텔 IA-32 CPU는 매우 다양한 종류의 명령(그중 일부는 상당히 강력하다)을 제공하지만 하이레벨 언어에 비해서는 여전히 상당히 원시적이다.

Multiply 함수를 수행하려면 로우레벨에서는 다음과 같은 작업이 이뤄져야 한다.


1. 함수의 코드를 실행하기 전에 이전 상태 정보를 저장한다.


2. z 변수를 위한 메모리를 할당한다.


3. 인자로 전달된 x, y 값을 내부 프로세서 메모리인 레지스터에 저장한다.


4. x와 y를 곱해서 결과 값을 레지스터에 저장한다.


5. 곱한 결과 값을 이미 메모리를 할당한 z 변수에 복사한다.


6. 앞서 저장한 상태 정보를 복원한다.


7. 함수 호출자에게 반환하면서 반환 값으로 z 변수의 값을 전달한다.


위의 과정에서 추가된 것은 대부분 로우레벨에서의 데이터 처리 작업임을 쉽게 알수있을 것이다. 



-- Secrets of Reverse Engineering 



반응형