분류 전체보기 150

[컴퓨터 구조](14)[어셈블리어 5]

프로시저제어권 전달 프로시저 코드의 시작 리턴 지점으로 돌아가기데이터 전달 매개변수, 리턴 값 등메모리 관리 프로시저 실행 중 할당 리턴할 때 저장소(스택) 반납스택먼저 들어간 것이 나중에 나오는 메모리 구조스택은 메모리 주소가 작은 방향으로 성장한다%rsp 레지스터는 스택의 top주소를 저장한다 (가장 최근에 저장된 값의 주소 저장됨)PUSH S: 스택에 S를 저장한다 %rsp = %rsp-8 S -> (%rsp)POP D: 스택에서 하나를 빼서 D에 저장한다. (제일 나중에 들어온 것을 D에 저장) (%rsp) -> D %rsp = %rsp+8프로시저 CALL 스택에 리턴 주소(호출된 장소) push 호출받은 함수로 jump프로시저 ret 스택에서 리턴 주소를 pop ..

CS/컴퓨터 구조 2025.01.24

[컴퓨터 구조](13)[어셈블리어 4]

점프 명령어(조건 분기): 조건(플래그)에 따라 코드 다른 부분으로 이동jmp: 무조건 이동je / jne: ZF 값이 1 / 0 이면 이동js/ jns: SF 값이 1 / 0 이면 이동jg / jge: 비교 연산의 결과가 크다 / 크거나 같으면 이동jl / jle: 비교 연산의 결과가 작다 / 작거나 같으면 이동ja / jb: 비교연산의 결과가 크다 / 작다goto 명령어C언어에서 지정된 레이블로 이동레이블은 위에서 아래로 쭉 실행 하지만 goto를 만나면 이동나중에 어셈블리어로 번역할 때, 플래그, 점프 명령어 등으로 구현됨if문 -> goto문if문if (x>y) result = y-x;else result = y-x;goto문 if (x>y) goto Else; result = x-y; ..

CS/컴퓨터 구조 2025.01.23

[암호학 둘러보기](6)[AES]

Rijndael: AES의 기원 알고리즘    Rijndael은 블록 크기가 128, 192, 256비트인 경우에서 작동하고 AES는 블록 크기가 128비트로 표준화된 것이다. AES: DES보다 더 보안성 있는 블록 암호    DES보다 더 큰 블록크기, 키 길이, 암호 라운드 수    DES는 페이스텔 구조를 사용한다면, AES는 SPN구조를 사용한다.    이 때문에 DES보다 AES가 더 보안성이 높다. AES의 구성 요소AddRoundKey: 라운드키와 메세지 XORSubBytes: S-box를 사용해 변환ShiftRows: 비트 섞기 (각 행을 시프트)MixColumns: 열 단위로 섞기AES의 구조첫번째 라운드AddRoundKeySubBytesShiftRowsMixColumnsAddRound..

[컴퓨터 구조](12)[어셈블리어 3]

플래그 레지스터: 연산 결과에 따라 0or1의 값을 가지는 1비트의 레지스터ZF (zero flag): 연산의 값이 0이면 1예시) xorq rax, rax (rax = 0이 됨) -> ZF = 1CF (carry flag): (비부호형에서) 연산의 값이 비트의 범위를 벗어나면 1예시) 1111(15) + 0001(1) = 10000(16) -> CF = 1SF (sign flag): (부호형에서) 연산의 결과가 음수면 1예시) 0001(1) + 1110(-2) = 1111(-1) -> SF = 1OF (overflow flag): (부호형에서) 연산의 결과가 오버플로우면 1오버플로우 판단은 결과값의 맨 첫번째 비트랑 두번째 비트를 xor하고 1 나오면 오버플로우다.예시) 0111(7) + 0001(1)..

CS/컴퓨터 구조 2025.01.22

[암호학 둘러보기](5)[DES 3]

simple DES 직접 구현해보기 간단하게 단일 메세지 블록(12비트)에 대해 구현해보겠다. 조건들은 다음과 같다.    메세지: 111111101010    마스터키: 001100111    함수 f: 1바퀴 왼쪽 회전 시프트, 이후 마지막 비트 2개 추가    S1, S2: 각각 2x8행렬, 각 행은 할때마다 랜덤으로 0~7의 중복 없는 행 생성됨. 기타 코드 설명    파이썬에서 그냥 시프트를 하면 앞에 있는 0은 무시됨(0001 -> 1) 따라서 문자열로 바꿨다가(bin, zfill) 다시 수로 연산했다가(int(x, 2)) 함. 코드#simple DES#회전 시프트용 함수: x를, k만큼 시프트, x길이def l_rot(x, k, n): return bin(((x > (n - k)))[2..

[컴퓨터 구조](11)[어셈블리어 2]

완전 메모리 어드레싱 모드앞에서 사용했던 (%rax)꼴의 확장D(Rb, Ri, S) = (Rb + S*Ri+D)이다.D: 상수(1, 2, 4 중 하나)Rb: 기본 레지스터Ri: 인덱스 레지스터S: 규모 (1,2,4,8 중 하나)예시) movq 2(%rax, %rcx, 4), %rdxrax+4*rcx+2인 메모리 주소에 있는 값을 rdx에 넣어라LEA 연산(lea S D: S(주소 형태)의 값을 D에 넣어라)S는 주소 모드 표현이어야 한다. (%rax)꼴. 단순 상수나 레지스터의 값은 안됨.($0x0103이나 %rax는 안됨)예시) leaq (%rax) %rcx = rcx에 rax의 값을 넣어라.S가 주소 형태이긴 한데, 메모리 접근은 하지 않는다예시) leaq (%rax, %rcx) %rdx = 마치 r..

CS/컴퓨터 구조 2025.01.21

[컴퓨터 구조](10)[어셈블리어 1]

어셈블리의 데이터 형식1, 2, 4, 8 바이트의 정수형 데이터데이터 값, 주소4, 8, 10 바이트의 부동소수점 데이터배열이나 구조체 같은 형태 없이 메모리 상에 연속으로 할당됨어셈블리의 연산레지스터 or 메모리 데이터에 대한 산술 기능 수행메모리와 레지스터 사이 데이터 전송전송 통제: 프로시저로 점프, 조건부 분기x86-64의 정수 레지스터 (64비트 길이)%rax%rbx%rcx%rdx%rdi%rsp: 특수 용도 레지스터라 보통 계산에 사용 안함%rbp%r8, %r9 ... %158바이트이지만, 하위 4바이트, 2바이트에 참조 가능 (예전 프로그램과 호환성)어셈블리의 데이터 이동피연산자 형식 (AT&T문법)상수 정수 데이터: 숫자 앞에 $를 붙임예시) $0x3A65, $-533레지스터: 16개의 정수..

CS/컴퓨터 구조 2025.01.20

[암호학 둘러보기](4)[DES 2]

DES: 라운드가 16개고, 64비트 블록 단위, 마스터키도 64비트의 알고리즘키 생성 알고리즘회전 시프트: 틈만 나면 회전 시프트를 한다...패리티 드롭:실제로는 패리티 비트 등의 검수용 비트가 들어있어 64비트가 아닌 56비트에 대해 암호화를 수행한다. 따라서 마스터키도 일부 8비트를 무시해 56비트가 된다압축: 비트 수를 줄이는 방법. 일부 비트값이 빠져있는 테이블을 통해 줄인다. (여기서는 56비트를 더 줄여 48비트로 만드는데 사용)암호화각 라운드마다L(i) = R(i-1)R(i) = (L(i-1)) XOR f(R(i-1), K(i))를 반복한다.복호화단순히 암호화의 역 과정이다.DES에 대한 공격브루트 포스: 가능한 모든 키에 대해 무차별적으로 대입하기    마스터키가 56비트이므로 2^56 ..

[컴퓨터 구조](9)[운영체제의 추상화]

운영체제는 하드웨어를 관리한다.운영체제에서 사용되는 추상화 파일: 입출력 장치의 추상화 가상 메모리: 메인 메모리와 입출력 장치의 추상화 각 프로세스들이 메인 메모리를 독점으로 사용하는 것 같게 느끼게 함. 분할된 메모리 영역에서 가상주소를 받고 그걸 사용함. 예시) 프로세스 A가 메모리를 할당받는다면, A 속 어떤 명령의 가상 주소 = k, A 속 어떤 명령의 물리적 주소 = 프로세스 A의 물리적 주소 + k 프로세스: 프로세서, 메인 메모리, 입출력 장치의 추상화 프로세스는 여러개 동시에 실행 가능 (프로세스를 재빨리 바꿔 동시에 실행하는 것처럼 보임(context switching). 바뀔 때 실행한 내용은 저장하고 서로 참조함.) 요즘엔 프로세스를 쓰레..

CS/컴퓨터 구조 2025.01.17

[컴퓨터 구조](8)[하드웨어의 동작 + 암달의 법칙]

하드웨어에서 프로그램 동작프로그램이 저장 장치에서 메모리로 로드됨CPU가 메모리에서 명령어를 읽어 해석하고 실행결과를 레지스터나 메모리에 기록필요할 경우 I/O 장치와 상호작용프로그램 종료 후 시스템 리소스 해제하드웨어에서 프로그램 동작 예시1) hello를 출력하는 c파일을 만들고 저장하기키보드에 입력된 글자들은 USB Controller에서 처리Bus를 통해 IO Bridge에 전달 (IOBus -> IOBridge)Bus를 통해 CPU내부에 진입 후 Bus 인터페이스에서 처리 (IOBridge -> System Bus -> Bus Interface)이후 CPU에서 연산, 필요시 레지스터나 메모리 버스타고 가서 주기억장치에 저장(CPU -> System Bus IOBridge -> Memory Bus..

CS/컴퓨터 구조 2025.01.16
728x90
반응형