Press "Enter" to skip to content

[카테고리:] 리눅스

리눅스에서 윈도우 공유폴더를 마운트 해 보자.

다음과 같이 쓰면 된다.

sudo mount -t cifs -o username=yjlee,uid=1000,gid=0,iocharset=utf8,codepage=cp949 //192.168.100.12/ShareFD ./sharefd/

sudo 는 루트권한으로 실행해 보자~
mount 는 마운트 하겠다는 명령어
-t cifs 는 파일 시스템 이름인데 윈도우의 공유폴더를 연결할때는 이렇게 한다.
-o 뒤에는 옵션이 붙는다.  각 옵션은 ,로 구분한다. 로그인이 필요한 경우 username으로 윈도우 컴의 로그인 아이디를 적어주었다. uid와 gid는 마운트된 영역의 유저아이디와 그룹아이디를 설정하는데 마운트 하는 사용자의 번호를 사용하면 되겠다. ls -lan (n옵션이 숫자로 유져아이디와 그룹아이디를 보여준다)로 조회하면 나온다. 그다음 입출력문자셋이 utf8이고 코드페이지가 cp949로 설정하여 공유폴더의 한글이 정상적으로 표시되게 한다.
//192.168.100.12/ShareFD 는 IP에 공유된 폴더 이름
./sharefd 는 마운트될 리눅스 상의 디렉토리

정상적으로 마운트 되면 ./sharefd 안을 살펴보면 공유된 폴더의 내용이 보일 것이다.

Segmentation fault 뜰때~ 돌려보자~

메모리 깨먹을 때 Segmentation fault 가 작렬하지요…

배열의 첨자를 벗어나서 접근하거나 포인터를 할당된 메모리를 넘어서 접근할때 나지요.

free에서 죽는 경우가 많고요.

주의할점은 malloc으로 strlen만큼 메모리를 잡고 sprintf를 하면 절대!!!!!! 안됩니다. 
sprintf는 뒤에 무조건 NULL을 하나 더 넣어주기 때문에 strlen보다 1 크게 잡아줘야 합니다.

또.. 

*** glibc detected *** free():invalid point

라는 메시지를 툭~~~ 던지고 몇페이지나 되는 데이터가 주루루루루룩~ 올라가는 경우가 있습니다.
요넘도 비정상적인 메모리 프리가 체크되면 뜨는건데요…

Linux libc 5.4.23이후와 GNU libc 2.x 버전은 환경 변수로 malloc을 조정할 수 있습니다.
쉘에서 export MALLOC_CHECK_=3 해주시면 에러 메시지를 출력하고 종료해 줍니다. 설정 값은 0~3

0 : 아무것도 하지 않고 그냥 프로그램 동작…. 프리하는 순간엔 죽겠죠??? 언젠가 맛팅이 가겠죠…
1 : 에러 메시지 출력
2 : 아무런 메시지 없이 프로그램 종료
3 : 에러 메시지 출력하고 프로그램 종료

긍게 2, 3을 해서 메모리 손상이 감지 됬을때 서 버리는게 낫겠죠? 메시지까지 출력해 준다면(3) 최고겠구요…

쉽게 문제의 코드를 찾는 방법은 valgrind 라는 프로그램을 쓰면됩니다.
정말 찾아내는 순간 쪽팔려서 얼굴이 발그레진다능… ㅋㅋㅋ

valgrind 자기가만든프로그램

요렇게 실행하면 어디쯤에서 메모리를 깨먹는지 대충 알려줍니다…. 영어루… ㅡㅡ;

apt-get instll valgrind apt-get install valgrind 를 하면 우분투에선 걍 설치해주겠죠???? 아님 말구… ^^

gcc 스텍 깨지는거 검사하기

스텍 깨지는거 검사 linux ubuntu 
출처 : http://stackoverflow.com/questions/1345670/stack-smashing-detected
ab@cd-x:$ cat test_overflow.c 
#include <stdio.h>
#include <string.h>

int check_password(char *password){
    int flag = 0;
    char buffer[20];
    strcpy(buffer, password);

    if(strcmp(buffer, "mypass") == 0){
        flag = 1;
    }
    if(strcmp(buffer, "yourpass") == 0){
        flag = 1;
    }
    return flag;
}

int main(int argc, char *argv[]){
    if(argc >= 2){
        if(check_password(argv[1])){
            printf("%s", "Access grainted\n");
        }else{
            printf("%s", "Access denined\n");
        }
    }else{
        printf("%s", "Please enter password!\n");
    }
}
ab@cd-x:$ gcc -g -fno-stack-protector test_overflow.c 
ab@cd-x:$ ./a.out mypass
Access grainted
ab@cd-x:$ ./a.out yourpass
Access grainted
ab@cd-x:$ ./a.out wepass
Access denined
ab@cd-x:$ ./a.out wepassssssssssssssssss
Access grainted

ab@cd-x:$ gcc -g -fstack-protector test_overflow.c 
ab@cd-x:$ ./a.out wepass
Access denined
ab@cd-x:$ ./a.out mypass
Access grainted
ab@cd-x:$ ./a.out yourpass
Access grainted
ab@cd-x:$ ./a.out wepassssssssssssssssss
*** stack smashing detected ***: ./a.out terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xce0ed8]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xce0e90]
./a.out[0x8048524]
./a.out[0x8048545]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xc16b56]
./a.out[0x8048411]
======= Memory map: ========
007d9000-007f5000 r-xp 00000000 08:06 5776       /lib/libgcc_s.so.1
007f5000-007f6000 r--p 0001b000 08:06 5776       /lib/libgcc_s.so.1
007f6000-007f7000 rw-p 0001c000 08:06 5776       /lib/libgcc_s.so.1
0090a000-0090b000 r-xp 00000000 00:00 0          [vdso]
00c00000-00d3e000 r-xp 00000000 08:06 1183       /lib/tls/i686/cmov/libc-2.10.1.so
00d3e000-00d3f000 ---p 0013e000 08:06 1183       /lib/tls/i686/cmov/libc-2.10.1.so
00d3f000-00d41000 r--p 0013e000 08:06 1183       /lib/tls/i686/cmov/libc-2.10.1.so
00d41000-00d42000 rw-p 00140000 08:06 1183       /lib/tls/i686/cmov/libc-2.10.1.so
00d42000-00d45000 rw-p 00000000 00:00 0 
00e0c000-00e27000 r-xp 00000000 08:06 4213       /lib/ld-2.10.1.so
00e27000-00e28000 r--p 0001a000 08:06 4213       /lib/ld-2.10.1.so
00e28000-00e29000 rw-p 0001b000 08:06 4213       /lib/ld-2.10.1.so
08048000-08049000 r-xp 00000000 08:05 1056811    /dos/hacking/test/a.out
08049000-0804a000 r--p 00000000 08:05 1056811    /dos/hacking/test/a.out
0804a000-0804b000 rw-p 00001000 08:05 1056811    /dos/hacking/test/a.out
08675000-08696000 rw-p 00000000 00:00 0          [heap]
b76fe000-b76ff000 rw-p 00000000 00:00 0 
b7717000-b7719000 rw-p 00000000 00:00 0 
bfc1c000-bfc31000 rw-p 00000000 00:00 0          [stack]
Aborted
ab@cd-x:$  

서비스(데몬) 조회 및 서비스 실행

우분투에서 ubuntu 서비스 조회

dpkg -l "*sys*log*" | grep ^ii

서비스 중지

service rsyslog stop

서비스 실행

service rsyslog start

서비스 재실행

service rsyslog restart

시간 단위

# 1 millisecond == 1000 microseconds
usleep(1000);
# 1 microsecond == 1000 nanoseconds
nanosleep(1000000);
# 1 microsecond == 1000000 nanoseconds
nanosleep(1000000);