json editorjson editor

Posted at 2012. 9. 16. 13:32 | Posted in 개발이야기

http://jsoneditor.appspot.com/ ? 기능 막강

http://www.thomasfrank.se/json_editor.html ? 다운로드 가능(PC에 다운 받아서 쓰면 됨). 대체로 쓸만함.

http://jsonlint.com/ ? 크롬 확장프로그램으로 설치 가능 (But, “바로가기” 라는거..)

//

LD_PRELOAD를 이용한 hooking, wrappingLD_PRELOAD를 이용한 hooking, wrapping

Posted at 2012. 1. 25. 20:18 | Posted in 개발이야기
hook_gethostname.c
 
#include 
#include 

int gethostname(char *name, size_t len)
{
    char *p = getenv("FAKE_HOSTNAME");
    if (p == NULL) {
        p = "localhost";
    }
    strncpy(name, p, len-1);
    name[len-1] = '\0';
    return 0;
}

wrap_hostname.c
// define to use RTLD_NEXT
#define _GNU_SOURCE
#include 

#include 
#include 

// function pointer for origin gethostname function.
static int (*gethostname0)(char *name, size_t len);

// __attribute((constructor)):
//      main함수가 호출되기 전이나,
//      공유 오브젝트가 로드되었을 때 실행해야 하는 함수에 사용.
void __attribute__((constructor)) init_gethostname0()
{
    gethostname0 = dlsym(RTLD_NEXT, "gethostname");
    //NOTE: dlsym이 실패한 경우는?
}

// hooking gethostname
int gethostname(char *name, size_t len)
{
    char *p = name;
    if (len > 6) {
        memcpy(p, "name: ", 6);
        p += 6;
        len -= 6;
    }
    return (*gethostname0)(p, len);
}

Makefile
TARGET_HOOK=hook_gethostname.so
TARGET_WRAP=wrap_gethostname.so

all:
    gcc -shared -fPIC -o $(TARGET_HOOK) hook_gethostname.c
    gcc -shared -fPIC -o $(TARGET_WRAP) -ldl wrap_gethostname.c

clean:
    rm -f $(TARGET_HOOK) $(TARGET_WRAP)

hook: all
    @echo ""
    @echo "- hostname -------------------------------------------------------------"
    /bin/hostname
    @echo ""
    @echo "- hostname hooking gethostname(libc.so) --------------------------------"
    FAKE_HOSTNAME=fake.hostname LD_PRELOAD=./$(TARGET_HOOK) /bin/hostname

wrap: all
    @echo ""
    @echo "- hostname wrapping gethostname(libc.so) -------------------------------"
    LD_PRELOAD=./$(TARGET_WRAP) /bin/hostname

run: hook wrap

$ make run
을 실행하면,,
gcc -shared -fPIC -o hook_gethostname.so hook_gethostname.c
gcc -shared -fPIC -o wrap_gethostname.so -ldl wrap_gethostname.c

- hostname -------------------------------------------------------------
/bin/hostname
deepblue-ubuntu

- hostname hooking gethostname(libc.so) --------------------------------
FAKE_HOSTNAME=fake.hostname LD_PRELOAD=./hook_gethostname.so /bin/hostname
fake.hostname

- hostname wrapping gethostname(libc.so) -------------------------------
LD_PRELOAD=./wrap_gethostname.so /bin/hostname
name: deepblue-ubuntu

참고: BINARY HACKS 해커가 전수하는 테크닉 100선
//

Adobe - EdgeAdobe - Edge

Posted at 2011. 10. 23. 21:42 | Posted in 개발이야기
플래시를 버릴건가?

http://labs.adobe.com/technologies/edge/

http://koko8829.tistory.com/m/1093
//

RSS feed가 valid한지 검사해보자.RSS feed가 valid한지 검사해보자.

Posted at 2011. 8. 14. 18:11 | Posted in 개발이야기
//

concurrent 도구 간단 정리concurrent 도구 간단 정리

Posted at 2010. 11. 11. 11:32 | Posted in 개발이야기

POSIX-pthread나 이를 wrapping한 여러 라이브러리들, java concurrent 패키지 등에서 유사한 이름으로 사용되는

concurrent 관련 객체, 메소드 등을 간단히 정리한다.


Mutex: 한번에 하나의 thread만 critical section에 진입 가능 (lock, unlock)

  • lock: 하나의 thread만 lock을 획득할 수 있고, 다른 쓰레드는 lock이 풀릴때 까지 대기.
  • tryLock: lock의 성질에 의해 진입할 수 없는 경우, false등을 반환하여 lock획득에 실패했음을 알리고 즉시 리턴. 
    (아무도 lock을 안잡았으면 잡고, lock이 잡혀있으면 즉시 리턴)
  • timedTryLock: tryLock과 동일하나 lock 획득을 위해 일정시간 대기한다.
  • unlock: lock을 해제
Semaphore: N개의 thread만 critical section에 진입 가능 (acquire, release)
  • acquire: lock과 동일하나 N개의 thread가 진입할 수 있다.
  • tryAcquire: semaphore의 성질에 의해 진입할 수 없는 경우, false등을 반환하여 lock획득에 실패했음을 알리고 즉시 리턴. (semaphore를 획득할 수 있으면 획득, 아니면 즉시 리턴)
  • timedTryAcquire: tryAcquire와 동일하나 semaphore 획득을 위해 일정시간 대기한다.
  • release: acquire로 얻은 semaphore(lock) 반납.
ConditionVariable: 상태 변수 (wait, notify(또는 signal)). Lock 객체와 연계하여 사용됨.
  • wait: 특정 상태가 변경될 때까지 대기함(notify(signal) 또는 notifyAll(broadcast) 이 호출될 때까지 기다림).
  • timedWait: wait와 동일하나 특정 시간 동안만 대기한다.
  • notify(or signal): 대기 상태에 있는(wait를 호출한) thread를 깨운다. 동시에 여러 thread가 대기하고 있는 경우 임의의 thread 하나만 깨어난다.
  • notifyAll(or broadcast): 대기 상태에 있는(wait를 호출한) 모든 thread를 깨운다.

    //