반응형

DSDT 수정없이 ALC888 Sound 설정하기


Specification 

CPU: Intel Core2Duo E8400

MB: Gigabyte EP35-DS3L (Bios F6)

SOUND: ALC888

LAN: Realtek 8186

VGA: Zotec Nvidia 9600GT

OS: Mac OS X "Mountain Lion 10.8.3"


1. ALC888_ML10.8.3.zip 압축풀기


2. /Extra/Extensions 폴더에  ALC8xxHDA.kext 복사


3. Kext Utility를 사용하여 AppleHDA.kext 와 HDAEnabler888.kext 설치하여 주기

 

4. 리부팅하기 




ALC888_ML10.8.3.zip


반응형
반응형

Dumpbin등 PE파일의 다양한 부분을 덤프할수있는 Microsoft Console Mode Tools 를 실행할때 만날수있는 Message이다. 이를 해결하기위하여 

C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin 
or 
C:\Program Files (x86)\Microsoft Visual Studio 10\VC\bin >
--------------
C:\Program Files\Microsoft Visual Studio 8\VC\bin 
or 
C:\Program Files\Microsoft Visual Studio 10\VC\bin >

등의 해당 디렉토리에서 vcvarsall.bat 를 실행하면 환경설정 PATH, Include, Lib 등의 설정환경이 셋업된다.


해당 Command를 열때마다 적용해야되니 시스템 속성에서 설정하여 두면 Prompt를 열때 마다 적용된다.



C:\Program Files\Microsoft Visual Studio 10.0\VC\bin>dumpbin /headers c:\windows
\system32/winsockhc.dll
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file c:\windows\system32/winsockhc.dll

PE signature found

File Type: DLL

FILE HEADER VALUES
             14C machine (x86)
               4 number of sections
        4A5BC956 time date stamp Tue Jul 14 08:55:02 2009
               0 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
            2102 characteristics
                   Executable
                   32 bit word machine
                   DLL

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            9.00 linker version
            EC00 size of code
            2200 size of initialized data
               0 size of uninitialized data
            A12A entry point (1000A12A)
            1000 base of code
           10000 base of data
        10000000 image base (10000000 to 10012FFF)
            1000 section alignment
             200 file alignment
            6.01 operating system version
            6.01 image version
            6.01 subsystem version
               0 Win32 version
           13000 size of image
             400 size of headers
           1DCC8 checksum
               2 subsystem (Windows GUI)
             140 DLL characteristics
                   Dynamic base
                   NX compatible
           40000 size of stack reserve
            1000 size of stack commit
          100000 size of heap reserve
            1000 size of heap commit
               0 loader flags
              10 number of directories
            F9F0 [      A6] RVA [size] of Export Directory
            EE60 [      C8] RVA [size] of Import Directory
           11000 [     6C8] RVA [size] of Resource Directory
               0 [       0] RVA [size] of Exception Directory
               0 [       0] RVA [size] of Certificates Directory
           12000 [     A98] RVA [size] of Base Relocation Directory
            1280 [      1C] RVA [size] of Debug Directory
               0 [       0] RVA [size] of Architecture Directory
               0 [       0] RVA [size] of Global Pointer Directory
               0 [       0] RVA [size] of Thread Storage Directory
            28B8 [      40] RVA [size] of Load Configuration Directory
             278 [      C0] RVA [size] of Bound Import Directory
            1000 [     248] RVA [size] of Import Address Table Directory
               0 [       0] RVA [size] of Delay Import Directory
               0 [       0] RVA [size] of COM Descriptor Directory
               0 [       0] RVA [size] of Reserved Directory


SECTION HEADER #1
   .text name
    EA96 virtual size
    1000 virtual address (10001000 to 1000FA95)
    EC00 size of raw data
     400 file pointer to raw data (00000400 to 0000EFFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         Execute Read

  Debug Directories

        Time Type       Size      RVA  Pointer
    -------- ------ -------- -------- --------
    4A5BC956 cv           26 00002900     1D00    Format: RSDS, {B7B6B5F2-F5C2-4
396-8343-3E7FFA72D41C}, 1, WinsockHC.pdb

SECTION HEADER #2
   .data name
     824 virtual size
   10000 virtual address (10010000 to 10010823)
     400 size of raw data
    F000 file pointer to raw data (0000F000 to 0000F3FF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         Read Write

SECTION HEADER #3
   .rsrc name
     6C8 virtual size
   11000 virtual address (10011000 to 100116C7)
     800 size of raw data
    F400 file pointer to raw data (0000F400 to 0000FBFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40000040 flags
         Initialized Data
         Read Only

SECTION HEADER #4
  .reloc name
     E4C virtual size
   12000 virtual address (10012000 to 10012E4B)
    1000 size of raw data
    FC00 file pointer to raw data (0000FC00 to 00010BFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
42000040 flags
         Initialized Data
         Discardable
         Read Only

  Summary

        1000 .data
        1000 .reloc
        1000 .rsrc
        F000 .text

반응형

Intel NetBurst Architecture

Development 2013. 2. 5. 00:32 posted by CecilDeSK
반응형

Intel NetBurst Architecture는 인텔이 IA-32 프로세서를 위한 실행환경이다. NetBurst의 기본적인 아키텍처를 이해하는 것은 거의 모든 IA-32 코드 생성기가 사용하는 최적화 지침에 대한 이론적 근거를 설명하는 것이므로 중요하다.


μops(Micro-Ops)

IA-32 프로세서는 프로세서가 지원하는 각 명령을 구현하기 위해서 마이크로 코드를 이용한다. 마이크로 코드는 본질적으로 프로세서 안의 다른 프로그래밍 계층이라고 할수있다. 이는 매우 단순한 연산 -매우 속도가 빠른, 만을 수행하는 아주 기본적인 핵심 부분을 프로세서가 포함하고 있다는 의미다. 비교적 복잡한 IA-32명령을 구현하기 위해 프로세서는 모든 명령 셋에 대한 마이크로 코드를 마이크로 ROM에 포함하고 있다.

마이크로 ROM에서 각 명령에 대한 아이크로 코드를 끊임없이 가져오는 작업은 성능상의 심각한 병목 현상을 야기시킨다. 따라서 IA-32 프로세서는 execution trace cache라는 것을 둬서 자주 사용되는 명령에 대한 마이크로 코드를 캐싱해 놓는다.


Pipeline(파이프라인)

기본적으로 CPU 파이프라인은 프로그램 명령을 해석하고 실행하는 공장의 조립라인과 비슷하다. 명령이 파이프라인에 입력되면 명령은 프로세서가 처리해야 하는 몇 개의 로우레벨 작업으로 세분화된다.


NetBurst 프로세서에서의 파이프라인은 다음과 같은 세 단계로 이뤄진다.


1. Front End 각 명령을 해석하고 해당 명령에 대한 μops 코드를 만들어 낸다. 그후 μops는 Out of Order Core에 입력된다.


2. Out of Order Core  -Front End로부터 μops 코드가 입력되면 프로세서의 다양한 리소스 가용 상태에 따라 μops코드의 순서를 재조합한다. 이는 사용가능한 프로세서의 리소스를 최대한 활용해서 병렬 처리를 수행하기 위함이다. 이 과정을 거치면 하나의 CPU 클록 사이클 동안에 여러 개의 μops 코드를 동시에 수행할 수 있다. 하지만 Front End에 입력되는 명령 코드가 어떤 것이냐에 따라 이 단계에서의 작업이 가능한 것인지 전적으로 좌우된다.


3. Retirement Section -이 단계에서는 Out of Order Core 단계를 거치면서 원래의 명령 순서가 변경됐는지 확인한다.


명령 수행의 관점에서 보면 명령을 실제적으로 실행시키는 네 개의 실행 포트(각 포트는 모두 자신의 고유한 파이프라인을 가지고 있다)가 존재한다. 

  포트 0과 포트 1은 모두 2배속 ALU(Arithmetic Logical Unit)를 포함하고 있다는 사실에 주목하기 바란다. 이는 각 ALU가 하나의 클록 사이클 동안에 두 개의 연산을 수행할 수 있다는 것을 의미하며, IA-32 최적화의 매우 중요한 특징 중 하나다. 예를 들어 하나의 클록 사이클 동안에 4개(각 2배속 ALU마다 두개의 연산을 수행)의 덧셈이나 뺄셈 연산을 수행하는 것이 가능하다. 반면에 SIMD 부동소수점 연산이 아닌 경우에는 최소한 하나 이상의 클록 사이클이 요구된다. 실질적으로 부동소수점 연산을 수행하는(메모리와 FPU 스택 간의 데이터 이동은 다른 유닛이 수행한다) 유닛이 하나이기 때문이다.


컴파일러가 생산한 코드의 모호성에 대한 이론적인 근거를 확실히 제공하므로 NetBurst 아키텍처에 근거해서 컴파일을 수행하는 컴파일러의 컴파일 알고리즘이나 명령의 배치 순서를 이해하는 데 도움이 될것이다. 


대부분의 IA-32 컴파일러는 NetBurst 아키텍처를 잘 알기에 코드 생성 단계에서 그것을 충분히 고려해 코드를 생성한다.



-- Secrets of Reverse Engineering 

 

반응형

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 



반응형