분류 전체보기 (27) 썸네일형 리스트형 백준 2738 행렬 덧셈 https://www.acmicpc.net/problem/2738 문제N*M 크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성.입력첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.출력첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.문제 해석처음 N과 M을 입력하여 NxM 행렬을 만들어 A행렬 먼저 입력한 후 B행렬을 마저 입력한다.스캐너를 쓸 수 있지만 BufferReader를 사용하여 문제를 풀겠다.packa.. 스택 버퍼 오버플로우 공격3 스택 버퍼 오버플로우 공격 대응스택 버퍼 오버플로우 공격을 막기위한 몇 가지 대책 방법이 있다.프로그램 정적 분석기Cigtal의 ITS4라는 코드 패턴 검사 경고가 있다.컴파일러Stackshield : RET 주소의 사본을 저장하고, 함수 종료 시 RET 주소와 사본을 비교하여 오버플로우 발생 여부를 판단한다.Stackguard : 버퍼와 RET 주소 사이에 카나리 값을 추가하고 사본을 저장한다. 함수 종료 시 카나리와 사본 카나리를 비교하여 오버플로우 발생 여부를 판단한다.하드웨어NX비트 : 데이터에서 코드를 분리하는 CPU 기술이다. 메모리의 특정 영역을 실행 불가능으로 설정한다. 그러나 Return to libc 공격에 취약하다.운영체제주소 공간 랜덤화(Address Space Layout Rand.. 스택 버퍼 오버플로우 공격2 이전에 해봤던 오버플로우 공격은 버퍼의 주소와 크기를 알 고 있었기에 가능한 공격이었다.실제 상황에서는 정확한 주소와 크기를 알기 힘들다.브루트포스로 주소를 일일이 대입하기에는 너무 오래걸린다.여기 '거리' 라고 표시되어 있는 부분을 모를때, RET가 앞인지 뒤인지 모를 때 의 해결법이다.이를 해결하기 위해 다음을 배워보자!RET 주소 스프레잉 기법버퍼 크기에 의해 RET 주소 영역이 결정된다.특정 위치의 RET 주소 마스킹 대신, 가능한 모든 위치에 RET 주소를 마스킹하는 방법이다. 버퍼 크기의 범위를 10~100바이트로 추정하자. 여기에 20+ $\alpha$바이트 만큼 마진을 추가하자.버퍼 시작 주소로 부터 120 + $\alpha$바이트 만큼 4바이트 단위로 RET 주소로 마스킹 한다.이렇게 하.. RNN2 RNN에는 state라는 개념이 있다.또한 이 state를 바탕으로 n to n 구조가 있다.LAG이 있는 Many to Many 구조언어 모델이나 기계 번역에서 자주 보이는 구조다.입력을 받으면 문맥을 뱉어내고, 이 문맥을 바탕으로 언어를 해석 및 번역하는 구조다.기계 번역입력 단어 자체를 원 핫 벡터로 만들기에는 차원이 너무 커진다.총 1000개의 단어가 있다고 하면 입력으로 1000개의 차원을 넣어야 한다.이렇게 하면 문제가 생기므로 embedding을 한다.embedding단어를 숫자 벡터로 바꿔주는 행위를 ebmedding이라 한다.이렇게 하면 단어를 기계가 알아 먹을 수 있게 되어 해석할 수 있게 된다. encoding RNN과 decoding RNN은 각 구조에서 weight matrix의.. 2024_05_19 조선대학교 장미 축제 광주에 사는 사람으로 한번도 조선대학교 장미 축제에 참여해보지 않아 이번 기회를 삼아 장미 축제에 참여했다. 장미를 보기 위해 가족, 연인, 친구 단위로 찾아온 손님들이 많았다. 나는 혼자 왔지만 발걸음을 서둘러 조선대 안 까지 들어갔다. 정문으로 들어와 박람회 부스를 넘어 운동장으로 들어가는 첫 길목에 놓인 장미다.코사이라 불리는 이 장미는 연중 계속 꽃을 피우는, 흔히 정원 장미라 불리는 종이다. 연중 계속 피우지만 사계절 중 무더위가 한창인 여름빛을 받은 새빨간 장미가 울긋불긋하게 피어오른게 정말 아름다웠다. 품종이 뭐였는지는 까먹었으나 꽃봉우리에서 이제 막 피어나려는 장미의 모습이 아름다워 한 장 찍어보았다. 조선대 학생들처럼 세상에 첫 발을 내딛는 모습, 이제 막 깨어나려는 모습이 아름다웠다. .. LSTM을 활용하여 MNIST 분류기 구현 colab에서 pytorch 라이브러리의 lstm 함수를 이용해 RNN을 구현할 것이다.import numpy as npimport torchfrom torch import nnimport torch.nn.functional as F# GPU 사용 여부 확인device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')print(device)라이브러리를 불러와주고, Colab에서 GPU를 이용한다.여기 런타임 유형 변경에서 바꿀 수 있다.from google.colab import drive# 여기는 각자의 드라이브를 마운트 하는 곳 이다.# 여러분들은 각자의 경로에 맞게 입력해주길 바란다.drive.mount('/content/gdrive',.. 스택 버퍼 오버플로우 공격 메모리 복사는 소스의 데이터를 목적지로 복사해야 하는 프로그램에서 매우 일반적이다.복사 하기 전에 프로그램은 목적지에 대한 메모리 공간을 할당해야 하는데 프로그래머의 실수로 충분한 양의 메모리를 할당하지 못하면 할당된 공간보다 많은 데이터가 목적지 버퍼에 복사되어 오버플로우가 발생한다.버퍼 너머의 데이터 손상으로 프로그램이 충돌하는 것 이상으로 제어권을 가져올 수 있는 문제를 야기한다.취약한 프로그램 예제먼저 strcpy의 동작에 대해 알아보자.#inlcude#includevoid main(){ char src[40] = "Hello world \0 Extra string"; char dest[40]; strcpy(dest,src);}이를 실행하면 Hello world까지만 des.. 스택 메모리의 호출 관계 프로그램 메모리 스택메모리는 이와 같이 스택은 아래로 자라고, 힙은 위로 자란다.스택 메모리에 데이터가 들어가면 주소값이 -가 된다.스택 메모리에서 주소 값이 낮을 수록 먼저 들어왔다고 이해하면 된다.스택 함수의 인수 순서함수에 인자를 받는 경우를 생각해 보자.void func(int a, int b){ int x, y; x = a + b; y = a - b; }가 있다고 해보자.스택의 베이스 포인터 (ebp)로 부터 12 만큼 떨어진 곳에 b를 넣은 후 8 만큼 떨어진 후에 a를 넣는다.그리고 ebp를 기준으로 8만큼 위로 x를 저장한다.ebp 아래에는 그 전 함수의 ebp가 저장되어 있고, 그 아래에는 함수가 끝났을 때 돌아갈 리턴 주소가 저장된다.그리고 그 아래에는 현재 함.. 이전 1 2 3 4 다음