본문 바로가기

Assembly13

어셈블리 디자인을 통한 컴퓨터 구조의 접근 1. 레지스터 디자인 고려 사항 : 레지스터 용량 레지스터 갯수 레지스터 각각의 용도 예) 레지스터 용량 : 16비트, 레지스터 갯수 : r0 ~ r7 (8개) 레지스터 용도 : r0 ~ r3 (저장용), r4(ir : instruction register), r5(sp : stack pointer), r6(lr : link register), r7(pc : program counter) (참고 : ir 은 다음번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용된다) 2. 명령어 구조 디자인 명령어의 구조는 레지스터의 용량, 갯수, 용도에 종속적으로 구성될수 밖에 없다. (예 : 레지스터가 4개 일때와 8개 일때 명령어 내부에 레지스터를 표현해야할 비트수가 달라진다) 따라서 어셈블리 언어로 구현된 .. 2010. 2. 9.
시스템 프로그래밍(System Programming)의 시작 시스템 프로그램(System Program) : 컴퓨터 시스템을 동작시키거나 하드웨어를 사용할 수 있도록 도와주는 프로그램 1. 컴퓨터 시스템의 주요 구성요소(Main Components) 컴퓨터 구조(Computer Architecture) : CPU 캐쉬(Cache) ↕ 운영체제(Operating System) : 메인 메모리(Main Memory) 하드디스크(Hard Disk) 2. 컴퓨터 구조 : 1) CPU : 중앙처리장치(Central Processing Unit) ALU(Arithmetic Logic Unit) : CPU 내부에 실제 연산을 담당하는 부분. 산술연산(+, -)과 논리연산(AND, OR)을 수행 컨트롤 유닛(Control Unit) : CPU 내부로 들어온 명령어를 해석해서 A.. 2010. 2. 8.
아이다(IDA)의 Debugging - IF문 분석 C언어로 if문을 컴파일한 것을 IDA로 분석해보자. #include void main() { int a = 3; int b = 5; if( a > b) { printf(" a 가 크다 "); } else { printf(" b 가 크다 "); } } IDA 그래프 기능으로 본 해당 소스의 흐름이다. 가운데 지점에서 빨간선과 초록선으로 분기하고 각각의 일을 실행한 후 하나로 합쳐지며 프로그램이 종료된다. .text:00411390 push ebp 에 breakpoint를 설정한다. 디버그 모드로 전환(F9)하여 분석을 해보겠다. 다음은 Main함수이다. .text:00411390 main proc near ; CODE XREF: j_mainj .text:00411390 .text:00411390 var_.. 2009. 11. 6.
아이다(IDA)의 Debugging - FOR문 분석 C언어로 for문을 컴파일한 것을 IDA로 분석해보자. #include int main(void) { int i = 0; int result = 0; for ( i ; i 2009. 11. 5.
아이다(IDA)의 Debugging - Stack 분석 IDA의 디버깅을 통한 스택의 Stack 분석 분석해볼 프로그램은 IDA의 사용법을 알아보기 위해 예제로 썻던 것을 계속 쓰겠다. 다시 한번 설명하면 func( ) 함수에 세 개의 값을 파라미터로 전달하고 그 값들의 합을 리턴하는 프로그램이다. #include func(int a, int b, int c) { return a+b+c; } int main(void) { int sum; sum = func(1, 2, 3); return sum; } 프로그램이 실행되기 전의 Stack이다. ESP, EBP의 위치를 살펴본다. .text:00401060 push ebp : EBP가 가리키는 곳이 SFP(Saved Frame Pointer)로 변하고, 그 윗부분이 RET로 바뀌며 스택에 EBP값 12FFC0h값을.. 2009. 11. 4.
아이다(IDA) 사용법 디스어셈블러 : 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴 IDA가 거의 독보적인 자리를 차지하고 있고, 기능도 다양하다. 아이다(IDA)의 장점 : 1. 거의 모든 CPU를 지원 2. FLIRT(Fast Library Identification and Recognition Technology)는 기계어의 코드로부터 컴파일러 특유의 Library 함수를 산출해낼 수 있는 강력한 기능 3. 각종 플러그인 지원 4. Obfuscation(난독화) 코드도 해석이 잘됨 IDA 설정 : IDA의 설정 파일은 ..\IDA\cfg 경로에 있으며 세부 설정을 할 수 있다. 단축키(idagui)를 재설정할 수 있고 disable된 설정을 enable시킬 수도 있다. 디스어셈블 상태와 디버깅 상태에서 특정 어셈블.. 2009. 11. 2.