전체 글(52)
-
오류를 찾고 수정할 수 있을까?
데이터에는 때로 오류가 포함될 수 있습니다. 프로그래밍 과정에서 생기는 오류를 버그라고 부르는데, 이 버그를 찾아서 제거하는 것을 디버깅이라고 합니다. 틀린 그림 찾기처럼 오류를 찾고 고치는 것이라고 할 수 있을 것 같습니다. 오류를 쉽고 간단하게 알아내는 대표적인 방법으로 패리티비트가 있습니다. 패리티 비트는 데이터를 전송하는 과정에서 오류가 생겼는 지 확인하기 위해 데이터 마지막에 추가되는 비트입니다. 전송하고자 하는 데이터의 끝에 1비트를 더하여 전송하는 방법으로 오류를 검출합니다. 패리티 비트에는 2가지 종류의 패리티 비트(짝, 홀)가 있습니다. 짝수 패리티는 전체 비트에서 1의 개수가 짝수가 되도록 정하는 것이고 홀수 패리티는 전체 비트에서 1의 개수가 홀수가 되도록 정하는 것입니다. 짝수와 홀..
2023.02.19 -
2차원 배열
배열은 많은 데이터들을 하나로 묶어 처리할 때 유용한 자료 구조인데 데이터는 1차원뿐만 아니라 2차원도 될 수 있습니다. 만약 한 학생의 5과목의 성적을 1차원 배열로 저장을 했는데 3명 학생의 성적까지 저장하여야 할 때 3개의 1차원 배열보다 하나의 2차원 배열이 편리하다는 것입니다. 아래 문장은 3행 * 5열의 요소를 가진 2차원 배열은 선언한 것입니다. 2차원 배열을 사용할 때도 인덱스를 사용합니다. (s [행 번호][열 번호] 형태) int [][] s= new int [3][5]; 아래 코드는 2차원 배열에 저장된 내용을 화면에 출력하는 코드입니다. for(int i=0; i < 3; i++) for(int j=0; j
2023.02.17 -
무명 배열과 배열 복사
자바에서는 배열의 이름을 지정하지 않고 단순히 초기값만으로 배열을 생성 시킬 수 있습니다. 무명 배열은 주로 즉시 배열을 만들어 함수의 인수로 전달하고자 할 때 사용됩니다. 무명 배열을 생성하는 방법은 아래와 같습니다. new int[] { 1, 2, 3, 4, 5, 6, 7, 8,9,10 } 초기값들의 개수에 따라 배열의 크기가 결정됩니다. 무명배열은 1회용이라고 할 수 있습니다. 무명 배열은 딱 한 번 필요하고 다시는 참조할 일이 없는 곳에서 사용되기 때문입니다. 조금 더 깊게 설명하자면 배열을 필요하는 메소드가 있다고 할 때 우리는 이 메소드에 배열을 전달하려 합니다. 이 배열은 메소드에만 전달하면 되고 다른 곳에 일체 사용되지 않습니다, 이런 경우 무명 배열이 사용되는 것이죠 아래 코드가 예시 입..
2023.02.17 -
26회 해킹캠프 +(블록체인)
26회 해킹캠프에 참여하게 되었습니다. 그 안에서 기초적인 해킹 접근 형식에 대해 알게 되었는데요 취약점을 아예 모르고 접근하는 black box 취약점을 부분만 알고 접근하는 gray box 취약점을 다 알고 접근하는 white box가 있습니다. 저는 정말 많은 발표를 들었는데 블록체인이 제일 기억에 남습니다. 블록체인이란? 제 3자의 기록으로 인해 더 신뢰는 쌓는 것이라고 설명할 수 있을 것 같습니다. A->B에게 돈을 빌렸다고 가정했을 때 A와 B는 각각 지출, 수입을 기록할 것입니다. 하지만 A가 B의 가계부를 없애면 기록이 남지 않아 얼마를 빌렸는지 모르게 되죠 이런 상황을 대비하여 A와 B의 상황을 제 3자인 C가 기록하는 형식을 데이터라고 생각하면 블록체인이라고 할 수 있을 것 같습니다. ..
2023.02.15 -
리버싱 1단계
저는 아래와 같은 c언어를 사용해 작성한 간단한 코드를 x64 dbg를 이용해 분석을 해보려고 합니다. #include int main(void){ printf("hello world"); 디버거를 시작하면 CPU 탭의 프로그램 코드 창을 볼 수 있는데, 그 창엔 명령어 포인터, 명령어의 메모리 주소, 명령어 코드(기계어), 어셈블리어 코드를 보여줍니다. (어셈블리어 코드란? : 명령어 코드를 디스어샘블한 코드입니다.) 화면을 실행 시킨 후 단축어인 ctrl -f8을 누르면 자동으로 프로그램이 시작됩니다. 아래 화면과 같이 디버거가 멈춘 곳이 프로그램의 코드가 시작되는 곳입니다. 디버깅의 진행은 분석이 필요한 코드를 찾고 그 코드의 의미를 파악하는 것입니다. 디버깅 진행에 도움을 주는 [F7], [F8]..
2023.02.07 -
큐
큐는 스택과 마찬가지로 데이터를 일시적으로 쌓아 놓는 자료구조입니다. 하지만 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 선입선출이라는 점이 스택과의 차이점이라고 볼 수 있습니다. 큐의 예로는 줄을 서 차례를 기다리는 대기열을 예로 들 수 있을 것 같습니다. 큐에는 인큐와 디큐가 있는데 아래 그림을 활용하면 인큐와 디큐를 설명하기 쉬울 것 같습니다. 배열 이름을 que라 할 경우 que [0]부터 que [3]까지의 데이터가 저장되어 있습니다. 1. 24인큐 먼저 데이터 24를 인큐 합니다. 그림처럼 맨뒤의 데이터가 저장된 que [3]의 다음 요소인 que [4]에 24를 저장합니다. 2. 19디큐 이번엔 19를 디큐 합니다. que [0]에 저장된 19를 꺼낸 다음 두 번째 이후의 요소를 모두 맨 앞으..
2023.02.03