분류 전체보기 21

프로그래밍 언어론 5장

컴파일러의 기본 이해와 구조1. 컴파일러의 정의와 기본 개념1.1 컴파일러의 정의고급 프로그래밍 언어로 작성된 원시 프로그램을 기계어로 번역하는 프로그램목표 컴퓨터에서 실행 가능한 코드 생성컴파일러 자체도 하나의 소프트웨어 프로그램1.2 컴파일러의 주요 특징원시 프로그램을 목적 프로그램으로 변환기계어 또는 어셈블리 언어 수준으로 번역하드웨어 의존적인 코드 생성2. 컴파일러의 기본 구조2.1 전단부(Front End)와 후단부(Back End)전단부 (Front End)언어 의존적 부분문법 분석과 의미 분석 담당중간 코드 생성후단부 (Back End)기계 의존적 부분코드 최적화목적 코드 생성2.2 컴파일러의 단계(Phase)A. 전단부 단계어휘 분석기 (Lexical Analyzer)별칭: 스캐너(Scan..

카테고리 없음 2024.11.14

프로그래밍 언어론 4장

프로그래밍 언어의 구문과 구현 기법1. 컴퓨터 시스템의 이해1.1 컴퓨터 시스템의 정의프로그램 저장 및 실행 가능한 알고리즘 집합알고리즘과 자료구조의 결합체처리 방법과 데이터의 통합 시스템1.2 컴퓨터 시스템의 분류실제 컴퓨터 (Actual Computer)물리적 하드웨어 시스템직접 만질 수 있는 실체소프트웨어 시뮬레이티드 컴퓨터 (Software Simulated Computer)가상 컴퓨터 (Virtual Computer)목적에 따라 다른 형태로 동작예: C 컴퓨터, Java 컴퓨터, 동영상 재생기 등1.3 컴퓨터의 용도별 분류범용 컴퓨터다양한 목적으로 사용 가능소프트웨어에 따라 기능 변경PC, 노트북 등임베디드 컴퓨터특정 목적만을 위한 시스템예: 항공기 제어 시스템, 게임기제한된 기능만 수행2. 프..

카테고리 없음 2024.11.14

프로그래밍 언어론 3장

프로그래밍 언어의 설계 목표와 성공 요인1. 프로그래밍 언어의 성공 요인1.1 주요 성공 요인기관의 지원컴퓨터 제조회의 전포적 후원국가적 예산 투자와 지원특화된 영역각 언어의 독특하고 특별한 적용 방언방언별 최적화된 기능 제공1.2 현대 언어의 성공 요인네트워크 환경 지원인터넷 기술의 필수화유닉스 계열 운영체제의 네트워크 지원객체 지향 개발현실 세계 반영 가능실제 세계의 모델링 용이성2. 초기 프로그래밍 언어의 설계 목표2.1 FORTRAN (1958)실행 효율성 강조하드웨이어 제약 그림빠른 실행 속도 출구2.2 COBOL (1959-1961)비즈니스 응용 중심간단한 수학 연산 위주영어와 유사한 문서형 프로그래밍2.3 ALGOL최초의 블록 구조 제공알고리즘 작성 용이성C 언어에 영향2.4 Pascal (..

프로그래밍 2024.11.11

프로그래밍 언어론 2장

프로그래밍 언어의 변천사1. 디지털 컴퓨터 이전의 알고리즘1.1 바벨론의 점토판 (기원전 1500-3000년)세계 최초의 알고리즘 기록60진법 사용 (현대 시간 체계의 기원)고정 소수점 개념 도입사칙연산과 대수 방정식 해법 포함‘This Procedure’ 형태의 선언적 표현 사용제한사항:분기문(if) 개념 부재0(영) 개념 미발견음수 개념 부재1.2 유클리드 알고리즘 (기원전 300년)최대공약수 계산 알고리즘자연어로 표현된 알고리즘특징:반복 개념 존재여전히 0과 1의 나눗셈 개념 부재바벨론 알고리즘 대비 제한적 진보2. 근대 이전의 발전2.1 찰스 바베지와 해석기관 (1792-1871)차분기관(Difference Engine)과 해석기관(Analytical Engine) 개발산업혁명 시대의 혁신적 계산..

프로그래밍 2024.11.10

프로그래밍 언어론 1장

1. 교과목 소개와 특성프로그래밍 언어들의 개념적 기초각 언어가 가진 특징과 장점운영체제, 하드웨어 시스템과의 연계성문제 해결을 위한 최적의 언어 선택 방법2. 컴퓨터 시스템의 기초2.1 컴퓨터의 5대 장치연산장치제어장치기억장치입력장치출력장치2.2 최초의 컴퓨터 시스템ABC 컴퓨터 (1943년)Atanasoff와 Berry가 설계최초의 전자식 컴퓨터ABC = Atanasoff-Berry ComputerENIAC (1946년)대포 탄도 계산용으로 개발2차 세계대전 중 개발 시작폰 노이만 구조 (1948년)현대 컴퓨터의 기본 구조 확립프로그램 내장 방식 도입현재까지 사용되는 기본 구조3. 프로그래밍 언어의 정의3.1 기본 정의컴퓨터와의 의사소통을 위한 표현법계산을 기술하는 형식적 표현 체계기계가 읽을 수 있..

프로그래밍 2024.11.08

블로그를 다시 시작하며..

마지막으로 작성한 포스트가 2019년 2월 7일이니, 벌써 5년 넘게 블로그를 방치해두었다. 그동안 글을 다시 써볼까 싶었던 순간들도 있었지만, 대학을 다니며 사업이 바빠지다 보니 도저히 시간을 낼 수가 없었다. 사실 시간을 낼 수 있었던 순간들도 있었겠지만, 사업으로 몸과 마음이 지치다 보니 블로그에 대한 생각은 금세 접고 말았다. 얼마 전 우연히 블로그에 접속했을 때, 누적 접속자가 2만 명 가까이 된 걸 보고 놀랐다. 주로 보안 관련 글을 올렸었는데, 아직도 많은 사람들이 보안에 대해 관심을 가지고 있다는 것을 5년간 방치된 블로그를 통해 다시 한 번 느꼈다. 이번에 블로그를 다시 시작하게 된 계기는, 최근 대학 동기 중 한 명이 블로그 작성을 시작하는 걸 보고 자극을 받았기 때문이다. 이번에는 꾸..

잡글 2024.11.07

TIS-100 1단계 MOV 명령어

TIS-100 1단계 MOV 명령어 이 게임은 어셈블리어를 간략화해서 만든게임이다. MOV명령어는 어셈블리어에서도 많이나오는 중요한명령어이기도 하다. MOV=MOVE를 줄인것으로 뜻은 움직임을 뜻한다.즉 데이터 이동(전송) 한번 직접 MOV 명령어를 사용해보자. MOV UP, DOWN을 IN.X 밑에 있는 박스에다가 적어보자.MOV UP, DOWN은 좌측에 IN.X안에있는 숫자를 위에서 받아서 아래로 전송하라는 명령어이다. 좌측밑에 STEP이라는 버튼을 눌러서 어떻게 숫자가 이동하는지 관찰해보자.STEP은 하나씩 실행하는것이도 RUN전부 실행 FAST를 누르면 바로 결과를 볼 수 있다. 위와 같이 IN.X에서 숫자 51을 받아오게 된다. 그 후 한번더 STEP을 누르면 51이 밑으로 가는것을 볼 수 있다..

게임/TIS-100 2019.02.07

TIS-100 어셈블리 프로그래밍게임

간략화된 어셈블리코드로 프로그래밍을 하는 TIS-100이라는 게임을 해볼려고 합니다.TIS-100은 스팀에서 구입할 수 있고 저는 세일을 해서 블로그에 리뷰할려고 3750원을 주고 구입했습니다. 원래는 7500원입니다. 게임실행화면 컴퓨터가 부팅되는 듯한 소리가 나면서 1972년의 부팅화면을 보여주는듯 합니다. 게임 메인화면입니다. 저는 이미 3시간을 플레이해서 클리어가 되어있는데 처음 시작하시는분은 빨간색 동그라미친부분만 열려있을것입니다. 이제 한번 게임을 시작해봅시다.1단계를 선택한 후 좌측상단에 3개의 네모중 하나를 누르시면 됩니다. 게임에 들어가면 나오는 화면입니다. 구조를 보면 네모칸에다가 프로그래밍을 하여 좌측상단에 조건을 맞추는것 같습니다.한번 RUN을 눌러서 실행해보면 좌측에 숫자가 채워지..

게임/TIS-100 2019.02.06

치트엔진 튜토리얼 7단계 다중 포인터

1.치트엔진 튜토리얼 Step 7 다중포인터 즉 말그대로 포인터의 포인터 포인터 포인터 이런식으로 다중으로 되있는것이다.정수를 가르키는 포인터가있으면 그포인터를 가르키는 포인터가 있고 그포인터를 가르키는 포인터가 있는게다중포인터이다. 이번단계는 4중으로 되어있는 포인터이다.밑에그림은 5중포인터이다. 문제를 잘못읽어서 잘못그려버렸다. 이런식으로 되어있다 .문제를 보면 4중포인터를 찾아 5000으로 고정하라는 뜻이다. 치트엔진을 실행시켜서 진값을 찾아 테이블로 옮겨놓는다. 이번엔 Find out what accresses this address 눌러 주소가 어디로 이동되는지 확인을 한다.한대 때리면 어디로이동하는지 화면에 뜬다. esi+18에 eax의 값을 넣는걸 볼수있다. 우리는 esi가 가지고있는 주소를..

치트엔진 튜토리얼 6단계 코드인젝션

1.치트엔진 튜토리얼 Step 6 코드인젝션 보기와 같이 진값을 미리 찾아 테이블로 옮겨 놓는다. 이주소가 어느곳에서 사용되는지 보기위해서 Find out what writes to this address 를 누른다. 그리고 한대를 때리면 보기와같이 SUB 즉 값을 빼는것을 알 수 있다. SUB는 어셈블리 명령어로 빼기라는 뜻이다.sub,[ebx+000000478],01 은 478이란주소에서 01만큼 빼라는 뜻이다 즉 공격을 했을때 1이 감소했던이유는 체력을 담고있는주소에서 버튼을 누를때마다 1씩 감소했기 때문이다. 우리는 이제 이것을 코드인젝션을 통해서 2씩 증가하도록 바꿀것이다. 문제를 보면 2씩 추가하면 성공이라고 나와있기 때문이다. Show disassembler를 클릭하여 메모리뷰에있는 어셈블러..