본문 바로가기

SMALL

분류 전체보기

(54)
레지스터 범용레지스터 범용레지스터란 cpu 내부에 있어 작은 데이터들을 임시로 저장하는 저장공간이다. 범용레지스터의 크기는 4byte 이다. EAX 계산에 대한 값을 저장하는 레지스터 (return 값이 주로 여기에 저장된다.) ECX 카운터 레지스터(반복할때 숫자를 세는 레지스터) EDX 데이터 레지스터 EBX 베이스 레지스터(메모리주소를 저장) ESP 스택의 윗부분(탑) 포인터 EBP 스택의 아랫부분(베이스) 포이터 ESI 데이터의 주소를 저장 EDI 데스티네이션 인덱스 (데이터를 복사할때 목적지주소) ※32bit에서는 EAX이지만 64bit 에서는 E가 아닌 R이다. ex) RAX, RCX, RDX... EAX -> 32bit -> 00000000 AX -> 16bit -> 0000 AH/AL -> 8bit..
빅엔디언과 리틀엔디언 엔디언은 데이터를 저장하는 바이트순서를 뜻한다. 엔디언중에 빅엔디언과 리틀엔디언이있다. 빅엔디언은 사람이 보기 편한 엔디언이다. 예를 들어, 12 34 56 78 90 을 빅엔디언으로 는 12 34 56 78 90 으로 평상시 우리가 알고있는 순서이다. 하지만 리틀엔디언으로 12 34 56 78 90을 나타내면 90 78 56 34 12 이렇게 나타난다.
올리디버거 단축키 올리디버거 단축키 Ctrl + F2 //재시작F7 // 한줄한줄 실행시키는데 안으로 들어감F8 // 한줄한줄 실행시키는데 자세히안봄 Ctrl + g //원하는 주소로 이동; // 주석을 달수있다. F2 // 브레이크포인트설정F9 // 브레이크폰이트까지 실행 * // 내 위치로 간다. Enter // 안을 자세히 들어가볼수있다. 마우스우클릭 > Search for > All reference text strings // 모든 문자열을 볼수 있다.마우스우클릭 > Search for > All intermodular calls // 모든 함수를 볼수 있다. Ctrl + e // 수정할 때 사용더블클릭 // 어셈블리어를 수정
CodeEngn basic 2번 문제 풀이 리버싱 CodeEngn basic 2번 문제 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 프로그램을 실행시키니 실행할수 없다고 되어있다.그래서 바로 올리디버거로 열어보았다. 올리디버거로도 열리지 않는다.hex editor로 열어보겠다.다행히 열리고 성공구문과 실패구문이 있다. 그리고 밑에 #1.JK3FJZh가 있다.패스워드를 JK3FJZh로 유추할수 있다.CodeEngn에 보니 답이 맞다.되게 찜찜하게 풀었다. 답: JK3FJZh
CodeEngn basic 1번 문제 풀이 리버싱 CodeEngn basic 1번 문제HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가?파일을 실행해 보면 다음과 같은 메세지박스가 뜬다. 나의 HDD를 CD-Rom으로 인식하게 만들어야하는것같다. 이 부분에서 첫번째 메세지 박스가 뜬다.계속 진행한 후GetDriveTypeA 라는 함수를 지나고 나니 EAX 의 값이 3으로 바뀐것을 알수 있다. 레지스터 EAX는 함수의 return값을 주로 저장하는 레지스터이다.INC ESI가 총 3 번있고 DEC EAX가 총 2번 있으니 ESI의 값은 +3이 되어있고, EAX의 값은 처음이었던 3에서 -2가 되어있는것을 볼수있다. 그후 EAX와EXI를 비교하여 같으면 성공메세지가 뜨고 다르면 실패메세지가 뜨는 것..
JAVA 배열 배열 배열이란?배열은 같은 타입의 변수 여래개를 하나로 묶어둔 형태이다. 만약 배열을 쓰지 않고 변수 10개를 만들려면 변수10개마다 각각의 이름을 지정해야한다. 이렇게 힘들게 변수들을 초기화 하지 않아도 간편하게 해줄수 있는게 배열이다.배열을 생성하는 방법은 2가지이다. 1.배열의 길이만 정해서 생성하는 방법 타입[] 배열이름 = new 타입[길이]; 이나 타입 변수이름[] = new 타입[길이];ex)int arr[] = new int[10]; 2.배열의 길이와 값을 동시에 생성하는 방법 타입[] 배열이름 = new 타입[] {데이터,데이터,데이터,데이터,데이터};ex)int[] arr = new int[] {1,2,3,4,5}; ※ {데이터, 데이터 , 데이터, , } 이렇게 하면 길이는 5개이고 ..
JAVA 반복문 while 반복문 while(){} while문의 구조는 다음과 같다.①에서의 조건식에 따라 ②의 반복문을 실행여부가 판별된다.그리고 조건식이 false 일때까지 계속 반복된다.그러므로 한번도 반복되지 않고 넘어갈수도 있고 무한반복이 될수도 있다. while문을 변형한 do while 문이 있다. do while문의 구조는 다음과 같다.※조건식 다음에 ;을 꼭해야한다. 차이점은 조건식의 위치이다. while문은 한번도 실행 안할 수 있지만do while문은 무조건 한번은 실행된다. 7번째 줄은 Random 객체를 생성한 것이다.8번째 줄은 0~10까지 랜덤으로 정수를 받는 것이다.
JAVA 반복문 for 반복문 for(){} 반복문은 주어진 조건을 만족하는 동안 주어진 문장들을 계속 수행한다.반복문에는 for,while이 있다. for문의 구조와 원리는 다음과 같다. ※설정을 잘못하면 끊임없이 계속 실행하거나 아예 실행이 안될 수도 있다. 13번에서 i가 이전에 초기화 되지 않았으면 초기화를 for문 안에 하면 된다.5~9 줄을 13~15까지 간단하게 나타낼수 있다.이렇듯 반복문은 코드의 줄을 줄일 수 있다. 사진이 길어서 잘랐지만 9 * 9 = 81까지 다 출력되어 있다.for은 이렇듯 이중으로 엮어서 매우 유용하게 쓰인다.이중으로 쓸때 for문을 사용하기 위해 초기화한 변수들의 값을 잘 확인해야한다. ※6.조건문에서 언급했듯 break는 조건문이나 반복문을 강제로 나올수 있다.

LIST