#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char buf[32];

int main(int argc, char* argv[], char* envp[]){

        if(argc<2){

                printf("pass argv[1] a number\n");

                return 0;

        }

        int fd = atoi( argv[1] ) - 0x1234;

        int len = 0;

        len = read(fd, buf, 32);

        if(!strcmp("LETMEWIN\n", buf)){

                printf("good job :)\n");

                system("/bin/cat flag");

                exit(0);

        }

        printf("learn about Linux file IO\n");

        return 0;


Hint 

0x1234 16진수 ==>> 4660 10진수

이고,buf가 LETMEWIN 와같을때,

'IT > Pwnable.kr' 카테고리의 다른 글

pwnable.kr / bof  (0) 2016.07.17
pwnable.kr / col  (0) 2016.04.09

세그먼트 레지스터: 


CS(Code Segment) – 코드를 저장하는 메모리 블록 


DS(Data Segment) – 데이터를 저장하는 메모리 블록 


EX(Extra Segment) – 비디오와 관련된 것을 위해 사용됨 


SS(Stack Segment) – 루틴으로부터 리턴 어드레스를 저장하기 위해 프로세서에 의해 사용되는 레지스터  


인덱스 레지스터: 


SI(Source Index) – 문자열/배열의 소스를 지정하기 위해 사용됨. 


DI(Destination Index) – 문자열/배열의 목적지를 지정하기 위해 사용됨. 


IP(Instruction Pointer) – 다음 명령의 주소를 저장하고, 그래서 직접적으로 변경될 수 없음.   

 

스택 레지스터: 

BP(Base Pointer) – 스택 오퍼레이션을 위해 SP 와 연결되어 사용됨. 


SP(Stack Pointer)   


특별한 목적을 위한 레지스터: 

IP(Instruction Pointer) – 실행된 명령의 offset 를 가지고 있음. 


Flag – 분기(branching)를 위해 사용됨. 플래그 레지스터는 크기가 1 비트이다.

=============

EAX : 곱셈이나 나눗셈 연산 할 때 사용되는 레지스터

 

EBX : 주소 같은거 간접적으로 접근할 때 사용되는 레지스터 


ECX : 반복문 돌릴 때 루프 카운트 되는 레지스터 


EDX : EAX레지스터를 보조해주는 레지스터


EDI , ESI : 조작 , 복사시 소스데이터 주소가 저장


ESP , EBP : 스택프레임의 끝지점 주소가 저장

=========================================================================


' 해당 주소 피연산자를(로) 명령어 하라. '


피연산자란?

- 명령어의 대상과 목적

EX) 레지스터, 메모리, 레이블, 상수

Practice


※ 명령어 


 IA-32 어셈블리 명령어 모음.pdf


MOV : 원하는 곳으로 데이터를 이동 (메모리에서 메모리로는 이동 불가)

MOV 피연산자,값


XCHG : 두 레지스터의 값을 바꿈  

XCHG 레지스터1,레지스터2 


JMP : 원하는 주소나 라벨로 점프

JMP AX

JNE : 같지 않은 경우 점프

JE : 같은 경우 점프

JNZ : 0이 아닌경우의 점프

JZ : 0인 경우의 점프


CMP : 비교 명령

CMP AX ,0x8

점프 명령이 이뤄지기전에 100%일어남


ADD : 덧셈을 수행하는 사칙연산 명령

ADD 레지스터 1, 레지스터 2 

ADD 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

ADD AX,BX  ;AX 에 BX 를 더하고, 그 값을 AX 에 저장(5h + 4h = 9h = AX)


XOR : 초기화

XOR AX,AX


LEA : 주소값 가져오기

LEA AX,주소


SUB : 뺄셈을 수행하는 사칙연산 명령

SUB 레지스터 1, 레지스터 2 

SUB 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

SUB AX,BX  ;AX 에 BX 를 빼고, 그 값을 AX 에 저장(5h - 4h = 1h = AX)


INC : 피연산자 값을 1 증가

INC AX


DEC : 피연산자 값을 1 감소

DEC AX


POP : 원래 값을 회복

POP AX


PUSH : 레지스터의 값을 잠시 저장

PUSH BX


Practice


MOV AX,51h 


MOV BX,4Fh  


XCHG AX,BX  


PUSH AX 


MOV AX,34h 


POP BX  


PUSH BX  


POP AX  

'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
Reversing / 1일차  (0) 2016.04.13
1. 어셈블리어의 장단점  (0) 2016.04.03

 

## 장점 ##


프로세서를 직접 제어할 수 있다. (레지스터 , I/O 에 접근)

동작을 하나하나를 정확하게 제어

효율적이고 최적화된 코드를 작성

고수준의 언어들로는 구현할 수 없는 부분까지 구현

어셈블리 언어를 통해 최적화된 소스는 가장 빠르고, 용량도 적음

 


## 단점 ##

프로그램 자체를 작성하기에는 복잡

만약 코딩을 재계획 하는 경우 , 코드 전체를 수정해야 함

다른 아키텍쳐나 프로세서로의 이식성이 부족


'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
Reversing / 1일차  (0) 2016.04.13
2. 어셈블리어의 기초  (0) 2016.04.03

해인사 장경판전



1995년에 등재된 유네스코 세계문화유산 국보 제52호로 경상남도 합천군에 위치해있다.

팔만대장경을 보관하고 있다.


출처 : 네이버 지도


해인사 장경판전에 대한 간단한 요점


- 우리나라 3대 사찰중 하나이다.



-팔만 대장경을 보관하고 있다.



- 앞쪽과 뒷쪽 창의 크기와 모양이 약간 다른데, 이것은 건물내의 공기가 순환되게 한다.



-숯 , 석회 , 소금 , 모래 등을 바닥에 깔아 습기를 조절하는 역할을 하였다.


 현재 해인사의 현존 건물 중 가장 오래된 건물이다.




- 초조대장경은 몽고에 의해 불타버렸다가, 다시 새겼다해서 재조대장경이라 일컫기도 한다.

- 16년에 걸쳐 제작하였다.


부처의 힘으로 몽고를 물리치기 위해 만들었다.

- 현재 경판의 수는 8만 1258판이다.
※ 양면 사용으로 실제의 전체 면수는 16만이 넘는다.

- 각 면에는 322자를 새겨넣었다.


- 나무가 썩는 것을 방지하기 위해서 경판에 옻을 칠했는데 옻이 약 400kg정도 들어갔다고 한다.

장경판전의 창살은 계절에 관계없이 적절한 양의 햇빛이 건물내로 들어가게 해주었다.


=====================================================================================



  • 팔만 대장경을 보관하기 위해 지어졌다.

  • 신라시대에 '순응' 과 '이정' 이라는 승려가 지었다.

  • 남쪽 부분에 세워진 건물을 수다라장이라고 한다

  • 뒤쪽인 북쪽 건물은 법보전이라고 한다.







블로그 헤럴드 메일

출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=04QbA&articleno=15795799&categoryId=92989&regdt=20091117095422




유네스코 세계유산 등재기준



그중 해인사 장경판전은 4번째 , 6번째 기준으로 등재되었다.


인류 역사에 있어 중요 단계를 예증하는 건물, 건축이나 기술의 총체, 경관 유형의 대표적 사례일 것


사건이나 실존하는 전통, 사상이나 신조, 보편적 중요성이 탁월한 예술 및 문학작품과 직접 또는 가시적으로 연관될 것



현재 해인사 장경판전은 과학적으로 높게 평가받고 있다.


기사 URL : http://sports.chosun.com/news/ntype.htm?id=201510010100003860023325&servicedate=20150930








해인사 장경판전과 팔만대장경에 대한 동영상


https://youtu.be/qhBNv5-paPw















'수행 평가' 카테고리의 다른 글

**창덕궁 알리미**  (0) 2016.04.09

사용자에게 몇년 몇월 몇일인지를 입력받아,


 1년 1월 1일부터 몇일이 지났는지를 구하고, 윤년인지 아닌지를 구하는 프로그램


ex) 


날짜를 입력하세요... yyyy mm dd


yyyy년 mm월 dd일은 *****번째 날이고 #요일이면서 윤년입니다.


=====================================


#include <stdio.h>

int main()

{


int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // 일 배열


int year,month,day=0,yun= 0,hapyear=0; // 년, 월,일,윤년 여부 변수 선언


printf("년 : "); // 년 입력


scanf("%d", &year);


printf("월 : "); // 월 입력


scanf("%d", &month);


if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 윤년 공식


yun = 1; // 만약 윤년이면 yun=1


}

if (month == 2 && yun == 1) // 월이 2월이고 , 윤년이라면

{

printf("일 (29일) : ");  // 일 입력

scanf("%d", &day);

}


else {

printf("일 (28일) : "); // 아니라면 그냥 일 입력

scanf("%d", &day);

}


if (1 <= month && month <= 12) { // month가 1월~12월 이고, day가 1~31일 안에 있을 때,

if (yun == 1)

{

printf("**윤년**\n\n");

printf("%d년 %d월 %d일은 \n", year, month, day); // 년 월 일 출력

}

else

{

printf("**평년**\n\n");

printf("%d년 %d월 %d일은 \n", year, month, day); // 년 월 일 출력

}

}

else {

printf("조건에 맞지 않습니다. 다시 입력해주세요.\n"); // 아니라면 재귀함수

main();

}


hapyear = (int)((year - 1)*365.2422 + (month - 1)*(365.2422 / 12) + day)-1; // 지난 일수 공식


// 2000년 5월 5일 입력시 1년 1월 1일부터 시작이므로 2000년 까지는 1999년이 지남 따라서 1999 * 365.2422

// 365.2422/12 = 1달기간이므로 입력한 달 전 달까지 4개월 치 계산 후 나머지 일을 더한다.



weeks(year,month,day,hapyear); // weeks 함수에 년 월 일 인자값


printf("1년 1월 1일 로부터 %d일 지났습니다.\n",hapyear+1); // 지난 일수 출력

}


int weeks(int year, int month, int day,int hapyear) // 년 월 일 인자값으로 받음


{


switch (hapyear % 7)

{

case 0: printf("월요일 이고,"); break;


case 1: printf("화요일 이고, "); break;


case 2: printf("수요일 이고,"); break;


case 3: printf("목요일 이고,"); break;


case 4: printf("금요일 이고,"); break;


case 5: printf("토요일 이고,"); break;


case 6: printf("일요일 이고,"); break;

}


return 0;

}


'IT > Programing' 카테고리의 다른 글

Dovelet / 여왕 벌/bumblebee  (0) 2016.04.03
프로그램 명: bumblebee
제한시간: 1 초

두 기차 A,B 가 l m 의 거리를 두고 있는 상태에서 여왕벌이 기차 A 에 앉았다가 날아올랐다. 기차 A 는 a m/s 로 기차 B 를 향해 달리고 , 기차 B 는 b m/s 로 기차 A 를 향해 달린다.

여왕벌은 기차 A 에서 기차 B 까지 x m/s 로 날아가다가 기차 B 와 부딪히기 직전 기차 A 를 향해 방향을 바꿔 x m/s 로 날아가고 다시 기차 A 와 부딪히기 직전 기차 B 를 향해 바꿔 날기를 반복한다. 그러다가 기차 A,B 는 부딪히고 여왕벌은 죽는다.

우리의 목표는 a,b,x,l 이 주어질 때 여왕벌이 두 기차 A,B 가 부딪히기 직전까지 날아다닌 거리를 구해야 한다.

입력

a,b,x,l ( 1 <= a, b < x < l <= 40000) 이 순서대로 주어지며 , 네 수는 모두 정수이다.

출력

여왕벌이 두 기차 A,B 가 부딪히기 직전까지 날아다닌 거리를 m 단위로 소수점 6 번째 자리까지 출력한다.

입출력 예

입력

2 3 6 10

출력

12.0000000

입력

3 4 9 10

출력

12.857143
추천: cube

링크 : http://59.23.113.171/30stair/bumblebee/bumblebee.php?pname=bumblebee

=======================


#include <stdio.h>


int main() {


float a, b, x, l; // 변수 선언


scanf("%f %f %f %f", &a, &b, &x, &l);


printf("%.6f\n", (float)l / (a + b) * x);



}


/*


두 기차 사이 거리 / ( 두 기차의 속력 ) * 벌의 속력


두 기차 사이 거리 / ( 두 기차의 속력 ) = 벌이 날아다닌 시간


벌이 날아 다닌 시간 * 벌의 속력 = 벌이 이동한 거리

*/

'IT > Programing' 카테고리의 다른 글

Critical / 윤 년 / Yun_year  (0) 2016.04.03

+ Recent posts