프로그래밍

Nochi·2023년 2월 14일
0

모의해킹

목록 보기
2/2

Normaltic Place 유튜브 모의 해킹 강의 2

[복습]
CPU <- Memory <- HDD

Programing

:

vi hello.c

#include <stdio.h>

int main() {
	
	printf("Hello~"); 
    return 0;
}

c언어 코드.

  • printf: 화면에 "" 글자를 출력하는 것.

$ gcc hello.c -m32
$ ls
a.out
$ file hello.c
hello.c: C source, ASCII text
$ file a.out
a.out: ELF 32-bit ... executable
$ ./a.out
Hello~

  • ELF : 리눅스의 실행 파일

8d4c2404(16진수)

  • 컴퓨터에서 바이너리 데이터를 표현할 때는 16진수를 쓴다.
  • 8진수로 표현된 부분은 "기계어"
  • 우측에 있는 부분은 "어셈블리언어"
  • call을 기점으로 분석한다.

브레이크 포인트

$ db @main

  • b: 는 브레이크 포인트.
  • 레지스터 <- CPU가 처리할 일들을 저장하는 공간.
  • push: 스택에 상단의 정보를 저장하는 것
  • pop: 스택에 상단의 정보를 가져오는 것

데이터가 저장되는 방식인 리틀 엔디안을 사용하니 찾아보기 (참조)

리버싱 엔지니어링 (참조)

헨드레이 (참조)

컴파일 (참조)
"gcc를 사용하면 c파일이 어셈블리어로 바뀐다"

프로그래밍 언어 종류

  • 컴파일 언어: 어셈블리 언어로 변해야하는 언어.
  • 인터프린터 언어: 컴파일이 필요 없는 언어(?)
    -> CPU가 읽을 수 있도록 컴파일을 하지만 그 과정을 인터프리터 언어가 한다.

C언어, JAVA: 코드 작성 -> 컴파일 -> 실행

  • 컴파일에서 기계어가 되면 빠르게 돌아간다.

Python, js: 코드 작성 -> 실행.

  • 작성된 코드가 언어에서 컴파일 되고 실행된다.

  • 어셈블리언어에선 포인터 개념이 있기 때문에 리버싱을 위해서라면 무조건 C언어는 필수.

프로그래밍 Project

  • 로또 번호 추첨 프로그램
    -> 1~45까지 중복되지 않는 7자리
  • 공부 매니징 프로그램 (이름, 성적, 국어, 수학, 영어)
    -> 평균을 알려주기.
    -> 부족한 과목 알려주기.
  • 성적 기록 프로그램
    -> 학생의 이름, 성적을 입력받으면, 엑셀파일에다가 차곡차곡 저장하는 프로그램
  • 핫트랜드 팔로워 프로그램
    -> 구글 최근 인기검색어 기반으로 해서 핫 키워드 하나를 알려준다.
  • 오늘의 날씨 프로그램
    -> 실행하면 지금 내가 있는 위치의 날씨를 알려준다.
    -> 지금 내가 있는 위치 정보도 알아야함.
    -> 오늘의 날씨도 알려줌

0개의 댓글