반응형



웹페이지에 간단한 계산기를 만들어보려고 한다. HTML언어만을 사용하기엔 클라이언트 언어이기 때문에 계산이 불가능하다. 그래서 서버언어인 JavaScript 언어를 사용하여 계산이 가능하도록 한다.


HTML언어로 틀부터 만들어보자.

<body>

<p>

<input type="text" id="num1" size="10" value=""> //첫번째 수

<select class="op" id="op"> //option 선택창

<option value='plus'>+</option>

<option value='sub'>-</option>

<option value='mul'>*</option>

<option value='div'>/</option></select>

<input type="text" id="num2" size="10" value=""> = <input type="text" id="num3" size="10" value="" readonly="readonly">

<input type="button" value="send" onclick="total()"> //계산 버튼

</p>

</body>

첫번째 칸과 두번째 칸에 계산할 수를 쓴 후 연산기호를 선택한다. 그런 다음 send버튼을 누르면 total()함수가 호출된다. 


<script type="text/javascript"> //JavaScript 부분을 HTML의 <head>사이에 삽입한다.

function total() //total()함수 부분

{

  var num1=document.getElementById("num1"); //<body>부분에서 num1변수를 getElementById를 이용하여 값을 가져온다.

  var num1s=num1.value; // num1에서 가져온 값을 num1s에 저장해주고,

  var num1b=parseInt(num1s); // 계산을 하기위해 그 값을 int형으로 바꿔준다.

  var num2=document.getElementById("num2"); //위 방법과 같음..

  var num2s=num2.value;

  var num2b=parseInt(num2s);

  var num3t;

  var op=document.getElementById("op"); //역시 op값을 가져오고

  var ops=op.value; //값으로 저장

  switch(ops) //ops의 연산기호에 따라 case를 나눈다.

  {

  case "plus": num3t = num1b + num2b;  document.getElementById("num3").value=num3t; break;

  case "sub": num3t = num1b - num2b; document.getElementById("num3").value=num3t; break;

  case "mul": num3t = num1b * num2b; document.getElementById("num3").value=num3t; break;

  case "div": num3t = num1b / num2b; document.getElementById("num3").value=num3t; break;

  } //계산한 값을 num3t에 저장한 후, 값을 num3로 가져간다.

}

</script>

값 불러오기, int형 변환만 생각한다면 간단한 계산기는 손 쉽게 만드는 것이 가능하다!!

반응형
반응형

객체지향 프로그래밍


 

 절  차    지  향

객  체   지  향 

정  의 

순서대로 프로그래밍 

무작위 프로그래밍 

 대표적  언어

 C언어, Basic 등..

C++, JAVA 등.. 

 호 출   방식

함수 직접 호출 

인스턴스를 통한 메소드 호출 


우리가 주로 사용하던 언어는 C언어, 즉 절차지향 언어였다. 쉽게 말해 절차지향 언어는 순차적으로 읽는 소설책같은 프로그래밍을 하며, 객체 지향 언어는 자신이 필요한 부분만 찾아 사용할 수 있는 백과사전과 같은 프로그래밍을 한다.

절차지향의 특징으로는 코드의 재사용이 높다는 점. 백과사전처럼 필요할 때 필요한 부분만 가져다 쓰면 되므로 기존 코드를 이용하여 쉽게 작성할 수 있다. 또한, 코드의 관리가 용이하다는 점을 들수있다. 그리고 신뢰성이 높은 프로그래밍을 할 수 있게 한다는 점인데, 객체지향언어에서의 메서드, 제어를 이용하여 데이터 보호가 가능하기 때문이다.


객체지향 언어에서 가장 중요한 개념이 있다면 클래스라 할 수 있다. 클래스는 객체를 생성하는데 사용되는데, 예를 들어, 어떤 건물을 세울려면 먼저 있어야 하는 설계도 같은 것이라 이해하면 된다. 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 앞에서 예를 든 것처럼 어떤 설계도 하나만을 잘 만들어 놓으면 그 건물과 비슷한 건물을 세울때 마다 설계도를 다시 그리지 않아도 된다. 설계도의 토대만을 가져와 필요한 부분만을 수정하면 된다는 것이다.


위의 그림에서 하나의 설계도가 여러 건물의 밑받침이 되는 것처럼 클래스도 마찬가지이다. 클래스만 잘 만들어놓으면 매번 객체를 생성할 때마다 고민할 필요없이 클래스로 부터 호출하면 되기 때문이다.


클래스로 부터 객체가 만들어지는 것을 인스턴스화라고 한다. 위의 그림으로 예를 들자면, '아파트는 객체다', '아파트는 건물 클래스의 인스턴스'라고 표현 가능하다.

객체의 구성요소에는 속성과 기능이 있는데, 속성에는 멤버변수, 기능에는 메서드가 있다. 예를 들자면, 아파트의 속성에는 높이(층), 평수 등이 있고, 기능에는 주거, 사무 등이 있을 수 있다.





 

반응형

'Study > Java' 카테고리의 다른 글

Java-Hello World!  (0) 2014.07.07
이클립스 설치  (0) 2014.07.07
JAVA 설치  (0) 2014.07.07
반응형

NT Header에는 IMAGE_NT_HEADERS 구조체가 있는데, 3개의 멤버로 구성되어 있다.

그 중 Signature은 50450000h("PE 00")값을 가진다. 또한 File Header와 Optional Header 구조체가 있다.


File Header


IMAGE_FILE_HEADER 구조체는 파일의 개략적인 속성을 나타내는데, 옆의 그림에서 보이는 4가지 멤버가 있지 않으면 파일의 정상적 실행이 불가능하다.





1. Machine

머신 넘버는 CPU별로 고유한 값이다.


2. Number Of Sections

코드, 데이터, 리소스 등이 각각의 섹션에 나뉘어 저장되는데 그 섹션의 개수를 나타낸다.


3. Size Of Optional Header

IMAGE_NT_HEADERS 구조체의 마지막 멤버인 IMAGE_OPTIONAL_HEADER32 구조체의 크기를 나타낸다. 


4. Characteristics

파일의 속성을 나타내는 값이다. 실행 가능한지 DLL파일인지 등을 bit OR형식으로 조합한다.


참고로 IMAGE_FILE_HEADER의 TimeDataStamp 멤버는 파일의 실행에 영향을 미치지 않지만, 해당 파일의 빌드 시간을 알려준다.

위는 IMAGE_FILE_HEADER 구조체를 나타낸 것이다.


Optional Header

PE헤더의 구조체 중 가장 크기가 큰 구조체가 IMAGE_OPTIONAL_HEADER32이다.

1. Magic : IMAGE_OPTIONAL_HEADER32인 경우 10B, IMAGE_OPTIONAL_HEADER64(64bit)는 20B값을 가진다.


2. Address Of Entry Point

EP의 RVA값을 가진다. 프로그램 최초 시작 주소이다.


3. ImageBase

프로세스 가상 메모리는 0~FFFFFFFF까지 광범위한데 이 광활한 메모리에서 PE파일이 로딩되는 시작주소를 나타낸다. 일반적으로 EXE 파일의 ImageBase값은 00400000, DLL은 10000000이다. PE로더는 PE파일을 실행시키기 위해 프로세스를 생성하고 메모리에 로딩한 후 EIP 레지스터 값을 ImageBase+AddressOfEntryPoint 값으로 세팅한다.


4. SectionAlignment, FileAlignment

PE바디는 섹션으로 나뉘어 있는데 파일에 섹션의 최소단위를 나타내는 것이 FileAlignment이고, 메모리에서 섹션의 최소단위를 나타내는 것이 SectionAlignment이다. 섹션 크기는 반드시 FileAlignment/SectionAlignment의 배수가 되어야한다.


5. Size Of Image

PE파일이 메모리에 로딩되었을때 가상 메모리에서 PE Image가 차지하는 크기를 나타낸다. 


6. Size Of Header

PE헤더의 전체 크기이다. FileAlignment의 배수가 되어야 한다. 


7. Subsystem

Subsystem값을 보고 파일의 종류를 구분할 수 있다.

 값

 의             미

 1

 드라이버 파일 - 시스템 드라이버

 2

GUI 파일 - 창 기반 어플리케이션 

 3

CUI 파일 - 콘솔 기반 어플리케이션 


8. Number Of Rva And Sizes

IMAGE_OPTIONAL_HEADER32 구조체의 마지막 멤버 DataDirectory 배열 갯수를 나타낸다. 


9. DataDirectory

IMAGE_DATA_DIRECTORY 구조체 배열로 각 항목마다 정의된 값을 가진다.


위는 notepad의 IMAGE_OPTIONAL_HEADER 구조체 영역을 가져온 것이다.











반응형

'Study > Reversing' 카테고리의 다른 글

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07

+ Recent posts

반응형
반응형