유닉스, 리눅스 상에서 프로그래밍을 하다 보면, 디버그나 로그를 위해 메시지를 남겨야 할 경우가 빈번하다.이 때, 사용해 볼 수 있는 간단한 팁이다. 이는 10여 년 전부터 사용해 오던 매크로(macro) 이다. 출력 파일로는 표준 출력(stdout)과 표준 에러(stderr)을 사용하였고, 이를 실제 파일로 리다이렉션(또는 dup() 등)하여 사용할 수 있을 것이다.시간관련 포맷팅을 위해 strftime() 함수를 사용한 것과, __FILE__, __LINE__, __func__ 및 __VA_ARGS__를 사용한 것이 특징이다.사용법? 아래 코드를 debug.h로 저장했다고 가정하자.// exam.c#inlcude "debug.h"int main(){DEBUG("Hello World %d\n", 201..
다운로드:libevent: http://sourceforge.net/projects/levent/files/latest/download?source=filestmux: http://sourceforge.net/projects/tmux/files/latest/download?source=filesYum 패키지:gcckernel-develmakencurses-devel리눅스 계정 모든 사용자를 위한 설치최신버전 다운로드하기 - libevent2 & tmux:$ sudo su - $ mkdir ~/downloads && cd ~/downloads $ curl http://sourceforge.net/projects/levent/files/latest/download?source=files -L -o libev..
http://www.blackhat.com/presentations/bh-federal-03/bh-federal-03-eagle/bh-fed-03-eagle.pdfhttps://www.blackhat.com/presentations/bh-usa-03/bh-us-03-mehta/bh-us-03-mehta.pdf Windows PE manipulators : UPX, ASPack, tElock, Scramble UPXLinux ELF manipulators : UPX, Burneye, Shiva
리눅스 실행파일을 디컴파일하거나, 디버그하기 어렵게 만드는 좋은 도구에 대해서 알아본다.이러한 도구는 두 방향에서 사용되었는데, 양성적으로 소프트웨어 개발 회사들이 자산(소프트웨어 바이너리)을 보호하기 위한 목적으로, 음성적으로는 해커들이 악성코드(malware)를 보안 탐지 시스템으로부터 회피하게 하기 위해서 사용하기도 했다.Shiva, UPX, Burneye ELF encrypter는 적절하지 못한데, 너무 오래 되었고 각각에 대해 크랙을 하는 방법이 이미 널리 알려져 있기 떄문이다. http://www.insidepro.com/kk/130/130r.shtml 위 링크에서는 크랙방법에 대해서 설명하고 있다.디컴파일링을 방지하는 최고의 도구/방법는 컴파일 시에 할 수 있다.g++ -O3 -s농담이 아니..
[미완성]튜토리얼 v.2.0이 글은 Jovana Milutinovich 씨가 Webhostinggeeks.com에 올린 글을 번역한 글이다. 목차1 소개2 프로젝트 셋업 (Free COM)3 프로젝트 셋업 (Non-Free COM)4 Hooking Basics5 Interception Handling6 Tunning & hacks7 Further research소개이 글은 Deviare를 사용해서 C# 프로그램에서 시스템 호출을 가로채는 기본적인 방법을 논의한다. 기본 준비 사항은 : 적절한 C# 컴파일러 및 에디터(VisualStudio 또는 SharpDevelop), 그리고 Deviare 2.0 를 다운받는다. 프로젝트는 Visual Studio 2008로 개발되었고, Visual Studio 201..
main -> 윈도우 시스템에서의 콘솔응용프로그램, 도는 DOS 응용프로그램의 엔트리 포인트WinMain -> 윈도우즈 시스템에서의 GUI 응용프로그램의 엔트리포인트 wmain -> 유니코드 버전의 mainwWinMain -> 유니코드 버전의 WinMain _tmain -> 매크로이며 유니코드 환경에서는 wmain으로 아닌 환경에서는 main으로 전처리_tWinMain -> 매크로이며 유니코드 환경에서는 wWinMain 아닌 환경에서는 WinMain으로 전처리 각 환경에 맞는 엔트리 포인트를 사용해야 하며이것이 제대로 해결 되지 않을 시(참조 위치:___tmainCRTStartup 함수)에서 확인하지 못했습니다. 라는 등의링크 에러가 발생 해결방법: 프로젝트속성(Alt+ F7) -> 구성 속성 -> 링커..
요즘은 대부분 웹 인터페이스를 제공한다. 심지어 기기, 가전에 이르기까지 웹인터페이스를 제공하는게 추세다. 보통 이러한제품들에 탑재하기 위해서는 일단 가볍고 볼 일이다. 포팅이 용이하고, 쓸데없이 많은 기능을 가질 필요는 없는 것이다. 반드시 필요한 요소만 간추려서 제공하고 포팅이 용이한 가변운 웹서버가 제격이다. 가벼운 웹서버들의 종류는 (링크) 많다.위 링크에서 언급된 웹서버들 중에서 오늘은 Mongoose를 리뷰해 보고자 한다.C언어로 개발되었고, 지원하는 플랫폼은 Windows, MacOS, Unix, QNX, Android, iOS등이다. 라이센스는 MIT라이센스이다. 현재 버전은 3.7이고, 글 쓰는 시점(2013-07-10)에서 최신 버전은 2013-02-05에 릴리즈되었다.아래는 간략한 오..
https://code.google.com/p/semicomplete/source/browse/codesamples/exponential-backoff.c아래는 exponential backoff관련 코드이다.#include #include void exponential_backoff(useconds_t *current, useconds_t maxwait) { usleep(*current); *current *= 2; if (*current >= maxwait) { *current = maxwait; } } /* void exponential_backoff(useconds_t *, useconds_t) */ int main() { useconds_t maxwait = 5000000; /* 5 second..
http://austingroupbugs.net/view.php?id=551 #include #include #include #include #include struct element { /* Pointers to these are stored in the tree. */ int count; char string[]; }; void *root = NULL; /* This points to the root. */ int main(void) { char str[_POSIX2_LINE_MAX+1]; int length = 0; struct element *elementptr; void *node; void print_node(const void *, VISIT, int); int node_compare(con..
https://code.google.com/p/semicomplete/source/browse/codesamples/tsearch-example.c #include #include #include #include #include typedef struct foo { const char *name; int value; } foo_t; int cmp(const void *a, const void *b) { foo_t *fa, *fb; fa = (foo_t*)a; fb = (foo_t*)b; return strcmp(fa->name, fb->name); } void walker(const void *node, const VISIT which, const int depth) { foo_t *f; f = *(fo..