목록전체 글 (420)
외로운 Nova의 작업실
- 문제 인식 canary가 있고 NX(NoeXcute)가 활성화 되어있습니다. 32비트 우분투 16.04 os임을 알 수 있습니다. 문제 파일을 보겠습니다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int idx) { pr..
- 백그라운드 제약 액티비티를 제외한 나머지 컴포넌트는 화면을 구현하는 용도가 아니라 백그라운드에서 작업을 처리할 목적으로 사용합니다. 그런데 예전에는 앱을 실행해 화면이 출력된적이 없는 상황에서도 백그라운드에서 작업을 처리할 수있었지만 안드로이드 8버전부터는 제약을 받습니다. 따라서 브로드캐스트 리시버나 서비스를 이용할때는 백그라운드 제약에 관해 잘 정리해둬야합니다. - 리시버의 백그라운드 제약 브로드캐스트 리시버는 암시적 인텐트로 실행할 수 없습니다. 위처럼 매니페스트 파일에 등록하고 아래처럼 다른 클라이언트 앱에서 코드를 실행하면 리시버는 받지못합니다. val intent = Intent("ACTION_RECEIVER") sendBroadcast(intent) 암시적 인텐트는 registerRece..
- IBinder 객체 바인딩 앞 장에서 살펴본것 처럼 서비스를 실행하는 함수를 2개 제공하는 이유는 서비스를 이용하는 상황을 2가지로 구분하기 위해서입니다. 다음 그림처럼 액티비티에서 startService()함수로 서비스를 실행했다고 가정해봅시다. 이처럼 백그라운드 작업은 필요하지만 액티비티와 데이터를 주고받을 일이없는 등 서로 관련이 없다면 startService()함수로 서비스를 실행하면 됩니다. 그런데 어떤 경우에는 서비스와 액티비티가 상호작용 해야할때가 있습니다. bindeService()는 이러한 목적으로 호출하는 함수입니다. - 실습 메인 액티비티.xml에 service라는 텍스트뷰를두고 원래는 service return 이라는 문자열이 이였다가 서비스쪽에 의해 문자열이 바뀌는 코드를 짜보..