목록전체 글 (303)
처음부터 차근차근
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nCiiS/btrzKsnvz3o/oydpkvFsvXzcLKhG9ftJbK/img.png)
EditText 이벤트 처리 - 리스너 객체 사용 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText editText = findViewById(R.id.editTest); Button button = (Button) findViewById(R.id.btnTest); button.setOnClickListener(new View.OnClickListener() { @Override public voi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mrCYO/btrzvKjy51Y/UBi8BkX8vIc4E6o6mQypdK/img.png)
파일 접근과 해제 #include // 파일 작업할 때 필요한 헤더 #include // 파일 작업할 때 필요한 헤더 #include // 파일 작업할 때 필요한 헤더 #include // c 언어 파일 작성할 때 필요한 헤더 #include // unix 계열 헤더 // argc : 명령 파라미터의 개수(자기 자신까지 1개로 침) // argv[] : 각각의 아규멘트의 값들(argv[0]는 자기자신) int main(int argc, char* argv[]){ // 파일 기술자 int nFd = -1; // 받은 값이 두 개(자기 자신 + 매개변수 1개)가 아니면 if (argc != 2) { // perror : 표준 에러 perror("we need an argument.\n"); // 프로그램 종..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sGyaB/btrzwguYds2/r4qtpIgpcnnDLi791ssQLK/img.png)
공유 폴더 만들기 1. kail linux를 키고 상단 바에 입력 -> 공유폴더 -> 공유폴더 설정 2. 임시 폴더 클릭하고 오른 쪽 파일 추가 아이콘 클릭 3. 이미지를 참고해서 입력 폴더 경로 : 공유 폴더로 만들 폴더 경로 지정 그러면 알아서 폴더 이름이 입력될 것이다. 마운트 지점 : linux에서의 공유 폴더 이름 이렇게 하면 window(내 컴퓨터)의 virtual_box \ example 폴더와 linux(virtual machine)의 /example 폴더가 연결되어 공유해서 쓸 수 있다! 4. 공유 폴더 접근 가능하게 만들기 공우 폴더를 설정해도 바로 접근할 수 는 없다. kali 계정 group에 vboxsf 사용자 그룹이 추가되지 않았기 때문이다. 명령어를 쳐서 kali 계정에 vbo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pEi2l/btrzve5HpxM/KptVN7P1HqS64akiNWcUgk/img.png)
virtualbox의 디스크 파일에다 kali linux vdi 파일을 넣고 실행시켰더니 가상머신을 실행 할 수 없다고 떴다. 이 오류의 원인 virtual box의 버전이 vdi 파일과 맞지 않아서 생긴 오류이다. 그래서 vdi 파일과 같은 버전의 virtual box로 업그레이드하면 해결된다. virtual box 최신버전으로 업그레이드 하는 법 virtual box 키고 파일 -> 업데이트 찾기 클릭 그럼 이 팝업창이 뜨는데 아래의 긴 링크를 클릭하면 최신 버전의 virtual box.exe 파일이 받아진다. 그럼 그 파일을 누르고 설치를 하면된다. 중간에 팝업창 같은거 뜨면서 설치가 중단 되면 x 표시 클릭하고 계속하면 된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/V7H2s/btrzkx3YURy/IXrkpQYCuAQESgS9ADdsTk/img.png)
DSDV 알고리즘 Distance-Sequenced Distance Vector routing 목적지에 도달하는데 소요되는 홉(hop)의 개수가 가장 적은 방향을 선택하는 알고리즘이다. 모든 노드는 주기적으로 이웃 노드들에게 자신의 테이블 정보를 알린다. 테이블 정보를 수신한 노드들은 목적지 주소와 홉의 개수들을 보고 자신의 테이블의 갱신한다. (A에서 시작) Destination Next hop Hops count A A 0 B B 1 C B 2 D D 1 E E 1 F F 1 Link State 알고리즘 노드 간 링크 상태(역량, 지연, 비용 등)의 관계를 고려하여 경로를 선택하는 알고리즘이다. 홉의 개수보다 링크의 상태에 우선순위를 둔다. 현재 위치에서 갈 수 있는 가장 작은 비용 소요 노드를 하나..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bdeC8d/btrAD9mZ1hD/tJlo6P7zUFTbdehZMYa71k/img.png)
우회 리버싱이란 틀려도 맞는걸로 처리하는 것이다. 우회리버싱에 익숙해지기 위해 실패메세지를 우회하는 크랙파일을 만드는 연습과 직접 키값을 찾는 연습을 해보았다. 실습1 성공 메세지를 출력하는 우회리버싱 -> 비교하는 부분 JMP 코드로 변경 C드라이브의 type이 CD-ROM이 아니지만 CD-ROM 타입으로 인식되도록 우회하게함 CMP명령어를 찾은 후 JE -> JMP로 수정하여 무조건 'HD is a CD-ROM'을 출력하는 문장으로 이동하도록 코드를 수정 성공 메세지 박스 출력하는 부분 시작 주소 : 0040103D 실패 메세지 박스 출력하는 부분 시작 주소 : 00401028 JE 40103D --> JMP 40103D로 변경하여 실패해도 성공 메세지 박스 출력하는 부분으로 JUMP하여 성공했다고 ..
var x : Int! = 10 // 선언문에서 ?는 옵셔널 변수 선언 print(x) //print(x!) // 실행문에서 느낌표는 강제 언래핑 if x != nil { // !는 그냥 쓰면 위험(x에 nil들어가면 crash남). 그래서 if문 사용해서 언래핑해줌 print(x!) // ! 옵셔널 변수는 옵셔널로 사용되지 않으면 자동으로 옵셔널을 푼다. } // 옵셔널 바인딩 if let xx = x { print(x, xx) } var a : Int? var y = a ?? 0 // a에 nil이 들어가있으면 0을 y에 대입한다. print(a, y) //optional chaning //실행문에서 ?를 쓰는 것 //Optional(10) //10 //Optional(10) 10 //nil 0 va..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIijXj/btryTNupXoK/rDt952yTvuf71AwMoYJRjk/img.png)
배경 지식 Android에서 UI 작업은 메인 스레드에서만 할 수 있다. 이유1. Android UI가 을 따르고 있기 때문(중요) 싱글 스레드 모델 : 안드로이드 화면을 구성하는 뷰나 뷰그룹을 하나의 스레드에서만 담당하는 원칙 1. 메인 스레드를 중단하지 않기 2. 안드로이드 UI 툴킷은 오직 메인 스레드(UI 스레드)에서만 접근할 수 있도록 하기 이유2. 앱의 속도가 느려지기 때문 메인 스레드에서 UI를 맡아서 작업하는 데, UI 작업 말고도 다른 시간이 많이 걸리는 작업까지 메인 스레드에서 도맡아 하면 앱의 속도가 현저히 느려진다. 그래서 UI를 제외한 다른 작업들은 다른 스레드에다 맡겨 분리하는 방법을 선택했다. 메인 스레드는 기본적으로 looper을 가진다. looper은 Message Queu..