Frist OpenCL example on Windows

이제 OpenCL 예제 프로그램을 작성하여 보자. 작성하기전 알아야 될 개념은 OpenCL은 가용한 자원들의 집합이 추상화된 platform 과 platform안에 연산유닛이 추상화된 device 라는 개념이 있다. 가용한 platform은 OpenCL에서 사용할수 있도록 알맞은 드라이버가 설치되어 있어야한다. NVidia 그래픽 카드의 경우 CUDA를 설치하면 드라이버가 설치된다. Intel CPU의 경우는 intel opencl 로 구글링하면 " Intel Developer zone " 이 리스팅되는데 이곳( https://software.intel.com/en-us/articles/opencl-drivers )에서 본인에게 알맞은 드라이버를 다운로드 하면 CPU자원을 이용할 수 있다. 실제 C로 작성되는 프로그램은 host 라고 부르며, 병렬로 처리되는 함수를 kernel 이라고 한다. kernel은 C언어에 OpenCL의 예약어를 이용하여 작성할 수 있다. 성격 급하니 이론보다 코딩부터 해보자. 먼저 내가 사용할 수 있는 연산자원이 얼마나 있는지 확인하여 보자. (예제 프로그램은 구글링한 결과를 참고하여 작성하였다. - 출처불명) host 프로그램 예제(getinfo.c) #include <stdio.h> #include <stdlib.h> #include <CL/cl.h> int main() { unsigned int i, j; //플랫폼을 가져오기 위한 배열(실제로는 포인터사용후 메모리 할당 해야함) cl_platform_id platforms[32]; // 플랫폼의 갯수를 저장하기위한 변수 cl_uint num_platforms; // 벤더이름. 1024바이트를 넘지 않았으면 한다. char vendor[1024]; //디바이스를 가져오기 위한 배열(...

Starting OpenCL with MinGW on Windows

이종병렬 프로그래밍에 사용되는 OpenCL 윈도우OS에서 컴파일/실행하기 위해서는  1. NVidia 홈페이지의 CUDA 존에서 툴킷을 다운로드 한다. Windows 8 64비트 용 파일이름은 cuda_6.5.14_windows_notebook_64 이다. 설치는 간단하다. 다음다음 하면 설치된다. 2. 컴파일 하기 위한 환경을 구성해야한다. 윈도우의 경우 VisualStudio Express, MinGW, cygwin 을 이용할 수 있다.  여기서는 MinGW를 설치하였다.(MinGW와 cygwin 의 차이점은 linux환경을 완벽하게 호환되게하는지 안하는지이다.)  MinGW를 검색해서 MinGW installer 설치후 msys, 컴파일러 등 선택하여 설치한다. 설치는 가급적 c: 드라이브 아래 MinGW 폴더로 하길 권장한다. program files 같은곳은 빈칸 때문에 사용할때 불편을 겪을수 있다. 설치가 끝나면 MinGW아래 msys 아래 버전폴더가 있다. 그 속에 보면 msys 배치파일이 있는데 실행하기전 MinGW의 위치를 마운트해주어야 한다. etc 아래 fstab 파일(없으면 생성한다)안에 아래와 같이 적어준다. C:\MinGW   /mingw 배치파일을 실행하여 컴파일러가 동작하는 확인한다. 3. 이제 OpenCL 예제 프로그램을 작성하여 실행해보자

오늘 아침 배달된 악성코드

이미지
제목: "오늘 아침 서울역에서 포착된 안타까운 사진이랍니다." 배포주소: 60.156.117.115/xz/c.apk 악성코드는 xz/c.apk를 입력해주면 획득할수 있다. 디컴파일해서 메니페스트만 봐도 최근 유행하는 코드처럼 sms 를 탈취하기 위해 리시버를 등록합니다. 그리고, 국민은행, 농협, 우리은행 등으로 위장한 앱을 다운로드 받습니다. 저장된 전화번호 목록으로 위 메시지를 전송합니다.

11번가 고객센터 모바일 상담

이미지
잘 읽어보면 "판매자와 통화 다 끝나고 교환하기로.." 라고 써있다.  질문의 요점이 파악이 안될만큼 어렵게 글을 썻나?? "더욱 더 노력하는 11번가가 되겠습니다."  정말 어이없는 답변에 실소만 나온다.

11번가 고객센터

11번가 앱에는 "구매확정" 버튼만 존재한다. 교환/환불은 눈씻고 찾아봐도없다. 고객센터 전화하면 기다리는사람이 많으니 기다리라고한다. 한참기다리면 오래기다렸다고 전화 끊어버린다. 어이가없다. 모바일 댓글상담 접수했다고 떴는데 답변은 없다. 중계 수수료만 받아먹으면 끝인가? 상담하는 직원들만 불쌍하다. 시스템이 개판이니 직원도 판매자도 구매고객도 괴롭다. 난 이제 11번가 안티다.

android setuid()

NDK를 이용해 setuid를 실행해보면 당연히 그냥은 안된다. 권한을 변경해주어야한다. http://en.wikipedia.org/wiki/Setuid 아래는 테스트 코드 int main(int argc,char *argv[]){ int id = 999; printf("hello world\n"); id = getuid(); printf("getuid(): %d , euid: %d \n",id, geteuid()); setuid(0); setgid(0); id=getuid(); printf("getuid() after setuid(): %d , euid: %d \n",id, geteuid()); return 0; } 위 코드를 NDK로 컴파일하고 디바이스에 넣고 실행해보자. 실행파일을 넣고 adb push hello /data/local/tmp 접속한다. adb shell 권한을 변경하고, 실행해보자 # cd /data/local/tmp # su # chmod 6755 hello # exit # ./hello hello world getuid(): 2000 , euid: 2000 getuid() after setuid(): 2000 , euid: 2000 # 안된다. 구글링 확인해보니 실행위치에도 관계가 있다. root권한으로 /system을 remount한다음 cat /data/local/tmp/hello > /system/xbin/hello 해서 복사한 다음 권한과 소유권을 변경하면 정상적으로 동작한다.

extX 파일시스템 블록사이즈에 따른 그룹 디스크립터 테이블의 시작위치

Ext(ext2, ext3, ext4) Filesystem 에서 Group Descriptor Table의 시작위치 First address of Group Descriptor Table on ExtX Filesystem ext 파일시스템의 모든 블록의 크기는 동일하다. ext 파일시스템의 처음 1024 블록은 0x00로 채워져 있는 예약영역이다. Block Size가 얼마이든 Superblock은 1024바이트 다음에 나타난다. ext 파일시스템을 마운트할때 블록의 크기를 알 수 없기에 1024로 가정하고 1024바이트의 예약영역다음 1024바이트를 읽어 슈퍼블록으로 해석한다. 그렇다면, 슈퍼블록다음에 나타날 그룹 디스크립터 테이블(Group Descriptor Table)은 어디서 나타날까? block size가 1KB, 2KB 일때 맨 처음부터 2048바이트 다음 위치부터 나타난다. block size가 4KB 일때 맨 처음부터 4096 바이트 다음 위치부터 나타난다. 즉 block size가 1KB, 2KB일때는 슈퍼블록이 나타난다음 바로 그룹 디스크립터 테이블이 나타나고, 4KB 일때는 2KB의 공간이 비어있고 나타나게 된다. 아래는 슈퍼블록의 구조체이다. /* * Structure of the super block */ struct ext4_super_block { /*00*/ __le32 s_inodes_count; /* Inodes count */ __le32 s_blocks_count_lo; /* Blocks count */ __le32 s_r_blocks_count_lo; /* Reserved blocks count */ __le32 s_free_blocks_count_lo; /* Free blocks count */ /*10*/ __le32 s_free_inodes_count; /* F...