OZ1NG의 뽀나블(Pwnable)

[CTF][Python][C언어] 문제 만들때 입력시간 제한 거는 법 본문

Tips

[CTF][Python][C언어] 문제 만들때 입력시간 제한 거는 법

OZ1NG 2019. 7. 28. 22:47

파이썬의 "signal"모듈에는 C언어의 alarm함수랑 signal함수와 완전히 같은 기능을 하는 함수가 있다.(이름도 똑같음.)
따라서 그걸 쓰면 된다.

[C언어 예시]
1
2
3
4
5
6
7
8
void hello(){ 
    printf("helloooo"); 
 
void main(){ 
    signal(SIGALRM, hello)  // SIGALRM이 발생되면 hello함수를 호출 
    alarm(3// 3초 뒤 알람(3초뒤 SIGALRM 시그널 발생) 
}

 

[python2 예시]
1
2
3
4
5
6
7
def timeout(dummy1 , dummy2):  # 더미인자를 주는 이유 : 아래의 signal함수에서 (~~, hello) <-- 와 같이 괄호 없이 사용하면 인자 두개가 지맘대로 들어가기 떄문에 오류(버그)를 피하기 위해 사용 
print "[!] Timeout!"              # 만약 (~~,hello())와 같이 사용한다면 프로그램은 인자로 받은 함수를 우선순위로 실행하고 그 함수의 리턴값을 인자로 줘야하기 때문에  
                             # 그냥 바로 hello함수가 실행되어 버림. 그래서 그렇게는 하면 안됨.  
 
#### main #### 
signal.signal(signal.SIGALRM, timeout)  # SIGALRM이 발생되면 hello함수를 호출 #단, 윈도우에서는 SIGALRM이 존재하지 않기 때문에 오류가 남. 리눅스에서는 잘됨. 
signal.alarm(3# 3초 뒤 알람(3초뒤 SIGALRM 시그널 발생) 
 

'Tips' 카테고리의 다른 글

[Python] 파이썬 형변환  (0) 2019.11.22
[비공개] gdb에서 파이썬 스크립트 입력하는 방법  (0) 2019.11.22
[Tools] One_gadget  (0) 2019.07.28
[Tools] libc-database  (0) 2019.07.28
[Tips] 어셈블리어 코딩, div 명령어 오류  (0) 2019.05.16
Comments