분류 전체보기
[C/C++] clock : 수행 시간 측정 / logging : 에러 출력
[C/C++] clock : 수행 시간 측정 / logging : 에러 출력
2018.08.09clock과 chrono의 초단위 정밀도 차이```c[clock ] 0.001513[chrono] 0.00151351``` [C] clock```c#include int main(int argc, char *argv[]) {clock_t begin, end;begin = clock();// processing end = clock();printf("[*] processing time : %lf\n", (double)(end - begin) / CLOCKS_PER_SEC);return 0;}``` [C++] chrono```cpp#include #include #include #include int main() { auto start = std::chrono::system_clock::now(); // p..
[python] @property, getter setter, private 필드
[python] @property, getter setter, private 필드
2018.08.07프로퍼티 지정 protected로 만들거면 `` _``, private으로 만들거면 `` __`` 프로퍼티는 일반 변수와 같이 명명하는게 통일성 있다. 메서드지만 외부에서는 변수처럼 보여야 하니까. property() 사용하는 방법도 있으나 decorator 사용하는 방법이 나아보인다. lock 변수를 사용할 때 좋은 듯 ```python @property def running_flag(self): with self.__running_flag_lock: flag = self.__running_flag return flag @running_flag.setter def running_flag(self, value): with self.__running_flag_lock: self.__running_flag ..
[C++] File IO : <ifstream> 과 pubsetbuf()
[C++] File IO : <ifstream> 과 pubsetbuf()
2018.08.03``c ifstream``을 사용할지, ``c fopen()``을 사용할지는 얻어낸 결과를 어디에 담을 것인지에 따라 결정하면 된다. 어차피 얻어낸 데이터를 가공하는 과정에서 `` string``으로 만들어야 한다거나, `` string``의 메서드를 사용해야 편한 경우라면 그냥 `` ifstream``을 사용한다. 왜냐면, ``c char*``에서 `` string``으로 변환하는건 새로운 `` string``을 만들면서 생성자로 ``c char*``데이터를 집어넣는 수 밖에 없는데 이 때 Deep copy가 발생한다.Shallow copy하는 방법 없나 찾아봤는데 아마 없는 것 같다.그래서 문자열 데이터가 큰 경우 copy시 발생하는 오버헤드를 줄일 필요가 있기 때문에 아예 가공할 데이터의 타입을 따..
Visual Studio 각종 설정, 환경 구축
Visual Studio 각종 설정, 환경 구축
2018.08.01기본적으로 경로 추가는, `` 프로젝트 설정 - VC++ Directories``에 모두 있다. 해서 여기다가 추가해줘도 되고,C/C++이나 Linker로 들어가서 설정해줘도 된다. 외부 소스 파일 .cpp 추가어떻게 해도 안되면, 소스 코드 솔루션 그대로 빌드해서 `` .lib`` 파일을 만들고 아래 방식대로 진행한다. 외부 .lib 파일 추가```프로젝트 설정 - C/C++ - 일반 - 추가 포함 디렉터리 : .h 파일 포함 디렉터리 경로 추가. 최상위 헤더파일 하나만 추가해도 된다. - 링커 - 일반 - 추가 라이브러리 디렉터리 : .lib 파일 포함 디렉터리 경로 추가 - 입력 - 추가 종속성 : 필요한 소스코드를 포함하고 있는 xxx.lib 파일 이름 추가```또는 다음 구문 사용```c#pra..
Windbg
Windbg
2018.07.26```c1: kd> x HelloDriver!gTraceFlagsfffff801`908a3020 HelloDriver!gTraceFlags = 01: kd> ed HelloDriver!gTraceFlags 0xffffffff1: kd> x HelloDriver!gTraceFlagsfffff801`908a3020 HelloDriver!gTraceFlags = 0xffffffff````` ed`` : e는 edit, d는 DWORD. `` eq``같은 것도 가능하다. Windbg에 OutputDebugString로 출력되는 디버그 스트링 찍기커널의 ``c Kd_DEFAULT_Mask``와 ``c &``연산을 하기 때문에, 기본적으로 아무것도 출력되지 않도록 되어있다.따라서 이 값을 ``c 0xffffffff..
ARP spoofing
ARP spoofing
2018.07.24https://github.com/umbum/arp_spoof 패킷 만들어서 보내면 victim이 `` arp -d``같은거 수행 안해도 패킷 받자 마자 ARP table 업데이트가 일어나면서 MAC이 변경된다. 근데 공유기 같은거 끼고하면 안되는게, 공유기에 ARP spoofing 방지 기능이 있기 때문.핫스팟 켜고 테스트해보면 잘 된다. ARP spoofing 방지 기능 없는 경우, `` src - 공유기 - victim``이 유선으로 구성되어 있는 경우에도 잘 먹힌다. * 저가형 공유기의 경우 자동 차단 기능은 없고, 몇 초 간격으로 공유기에서 다시 ARP를 보내는 수준의 기능만 있다. Attacker spoofing 패킷을 시도하는 호스트. Sender spoofing을 당해 Attakcer에게 ..
Linked list 구현
Linked list 구현
2018.07.20```c typedef struct _node { unsigned int data; struct _node *next; } node; typedef struct _l_list { node *head; node *tail; } l_list; ``` `` node`` 하나만 써서 관리하면 두가지 단점이 있는데, 1. 항상 head를 잃지 않도록 조심해야한다. 2. 끝에서 부터 접근하지 못한다. (항상 head에서 부터 접근해야 한다.) 반면 `` l_list``라는 구조체를 하나 만들어 head와 tail을 가리키도록 만들어 주면, 앞뒤로 접근 가능하며 언제나 head를 따라갈 수 있음을 보장할 수 있다. C 같은 경우, 잘못해서 `` l_list``를 넘겨야 하는 곳에 `` node``를 넘기는 경우 타입..
JPEG와 EXIF의 GPS data (위도, 경도)
JPEG와 EXIF의 GPS data (위도, 경도)
2018.07.07일반적인 위도(Latitude), 경도(Longitude) 표기법위도가 N. 위도가 위로부터(북극) 얼마나 떨어져 있는지 이므로.경도가 E. 37°28'46.912000000011247"N 126°52'45.631999999983037"E인 좌표에서 위도를 십진수 도(DD)로 환산하면 다음과 같다.\\(46.912000000011247/60 = 0.78186666666685411666666666666667\\)\\((28+0.78186666666685411666666666666667)/60 = 0.47969777777778090194444444444444\\)\\(37+0.47969777777778090194444444444444 = 37.47969777777778090194444444444444\\) ..
디자인 패턴 - Singleton
디자인 패턴 - Singleton
2018.06.22singleton VS static 어차피 하나만 생성되는 객체라면 ``java static`` 메서드만 가진 클래스로 만들어도 똑같은거 아닌가 싶을 수도 있겠지만, 다음과 같은 장점 이 있다. OOP 패러다임 : 싱글턴은 OOP 패러다임을 따르는 객체이지만, static은 객체가 아니므로 OOP 패러다임과는 거리가 멀다. 상속 : 싱글턴은 인터페이스를 구현하거나, 클래스를 상속받거나, 상속해줄 수 있음. (반면 static은...) 인스턴스화 : 싱글턴은 static class와 달리 인스턴스화가 가능하다. (static은 인스턴스화가 의미가 없다) 인스턴스화가 가능하다는 것은 필드, 매개변수로 전달, 리턴 가능하다는 것이다. 상속 & 인스턴스화 가능하다는 것은? == 다형성을 사용할 수 있다. 다형성..
파이프라이닝과 해저드
파이프라이닝과 해저드
2018.06.20Pipeline한 cycle 당 instruction 하나를 모조리 실행하는 단일 사이클 방식은 이미 지나간 데이터 패스 자원이 명령어가 끝나고 다음 명령어가 들어올 때 까지 놀고 있기 때문에, 이런 자원을 계속 돌리기 위해 명령어를 멀티 사이클로 나누고 병렬로 실행하는 방식. 하나의 instruction을 ``c IF - ID - EX - MEM - WB`` 5 stage로 나누고, 한 cycle 당 한 stage 씩 실행하는데 각 stage를 병렬적으로 실행하는 방식이다.하나의 명령어를 실행하는데 5 cycle이 필요한 것 처럼 보이나, 명령어 100개를 파이프라인에 넣고 돌린다고 생각해보면 처음 파이프라인에 명령어를 투입할 때(fill)와 파이프라인에서 마지막 명령어가 빠질 때(drain)를 제외하..
[C/C++]의 동적 할당과 Memory leak
[C/C++]의 동적 할당과 Memory leak
2018.06.11이게 아주 중요한 이슈인데, memory leak은 구조체, 포인터의 배열 등 동적 할당 받은 공간이 또 다른 동적 할당 받은 더 큰 공간의 entry가 될 때 자주 발생한다. 다음과 같이 단순한 경우는 그냥 해제 해주면 그만이다.```cvoid normal() { void *foo = malloc(4); free(foo);}``` 근데 문제는 다음과 같은 상황이다.```ctypedef struct _ {int *record[3];} Bucket; Bucket *bucket; void insertEntry() {int *foo = (int*)malloc(sizeof(int));*foo = 1;bucket->record[0] = foo;} void leak() {bucket = (Bucket*)malloc..
연속 확률 분포, continuous probability distribution
연속 확률 분포, continuous probability distribution
2018.05.30연속 확률 분포값들이 연속적이다.연속 확률 분포의 확률 밀도 함수\\(f(x)\\)는 연속적인 값, 즉 일반적으로 생각하는 함수로 정의되며누적 분포 함수는 연속 그래프로 나타난다.\\(F(x) = \int_{-\infty}^{x} f(u)\, du\\)연속 확률 분포는 logistic distribution이라고도 한다. 연속 확률 분포의 누적 분포 함수는 logistic function이 된다. (모양을 생각해보면 S곡선이다.)이 logistic function이 logistic regression과 feedforward neural network에서 등장하는 그 것이다. 균등 분포 Uniform distribution주어진 구간에서 발생 확률이 모두 동일할 때.\\[f(x) = \begin{cases..