분류 전체보기

    2013.09.11_스택영역을 확인해보자_스크랩

    보호되어 있는 글입니다.

    2013.09.11_CODE Stack 영역 알아보기_수정중

    보호되어 있는 글입니다.

    2013.09.11_UNIX 프로그래밍_변수특성

    자동 변수, 전역 변수, 레지스터 변수, 정적 변수, 휘발성 변수 ▶ 오른쪽 - 최적화 안한 소스 ( gcc -O -o 출력파일이름 출력파일이름.c ) ▶ 왼쪽 - 최적화 소스 ( gcc -o 출력파일이름 출력파일이름.c ) 예를들어서, ARM 에서 레지스터 ADC 의 값을 계속 찍어 내려고 printf를 연속으로 쓰면 gcc에서는 warning이 뜬다. 센서 값은 계속 변하는 값이기 때문에 변수 하나를 선언하고 변수에 센서값을 넣은 후에 변수를 찍어내야 오류가 안난다. 예제 소스 #include "apue.h"#include static void f1(int, int ,int ,int ); static void f2(void); static jmp_buf jmpbuffer; static int glob..

    2013.09.10_ASM_push_instructions, pop_instructions

    push Instructions , pop Instructions ▶ push 명령어 : 메모리 구성의 stack 영역에 직접 값을 집어 넣어주는 명령어 push eax 1. esp = esp-4; 2. eax = *esp .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dxExitCode:DWORD .STACK 4096 .DATA .CODE _smart: mov eax , 0aaaaaaaah mov ebx , 0bbbbbbbbh mov ecx , 0cccccccch mov edx , 0ddddddddh push eax push bx push 0cch push 0ddh INVOKE ExitProcess, 0 PUBLIC _smart END ▶ 설명 : 처음위치 ..

    2013.09.10_UNIX_7.7(DLL)~setjmp,longjmp 함수

    공유 라이브러리 ( Dos: DLL ( Dynamic Link Library ) ) ▶ 예를 들어 printf() 라는 함수는 Library 에서 경로를 통해 끌어다가 사용한다.항상 실행될때 쓰이고, 실제로 App에 저장되어있지는 않다. 이렇게 사용되는 것이 "공유 라이브러리" 이다. 리눅스에서는 공유라이브러리, 윈도우에서는 DLL 이라한다. 명령어 예제 ▶ gcc 가 공유 라이브러리를 사용하지 않게 해서 컴파일을 하면 용량이 늘어나는 것을 확인 할 수 있다. ▶ -static 을 파일 앞에 붙여 컴파일 ▶ size 를 알아보면 얼마만큼 붙었는지 알 수 있다. 환경변수 (getenv, setenv, putenv) char * getenv(const char *name) : name 에 해당하는 환경변수 ..

    2013.09.04_jmp_instruction

    jmp Instruction ▶ jmp targetStatement : Label or 변위 만큼을 점프할 수 있다. ▶ jns targetStatement : 상태플래그가 SF가 '0' 이면 수행되는 명령 ( 변수 A 값이 0보다 크거나 같으면 점프 ! ) ▶ jnz targetStatement : 상태플래그 ZF가 '0' 이면 수행되는 명령 ▶ jne targetStatement : 상태플래그 ZF가 '0' 이면 수행되는 명령어( 변수 A가 0과 같지않다면 점프 ! ) ▶ cmp operand1, operand2 : compare 비교 명령어. cmp eax, 1 형식으로 사용합니다. cmp 명령은 혼자 사용되지 않고 언제나 조건 점프 명령어나 조건 이동(mov) 명령어와 함께 사용. 위는 4byte..