Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬
- UKPT
- 여행
- Los
- 국가정보원
- 프로젝트
- UKPT level
- nurisec
- PHP
- webhacking
- 국정원
- 불법유통근절
- 12기
- HTML
- 기타정보
- 연구모임
- 화학물질불법유통온라인감시단
- 국가기록원
- 도구모음
- MITRE ATT&CK
- codeup
- 화학물질안전원
- 웹 해킹 입문
- 대외활동
- 화학물질
- 불법유통
- suninatas
- Service
- 정보보안
- 경기팀
Archives
- Today
- Total
agencies
정규표현식을 이용하여 C 언어에서 함수 추출해보기! 2탄! 본문
import re
def extract_user_defined_function_names(file_path):
with open(file_path, 'r') as file:
code = file.read()
# Improved regex pattern to handle attributes and complex declarations
function_pattern = re.compile(
r'\b(?:static|extern|inline)?\s*' # Optional specifiers
r'(?:__attribute__\s*\(\([^)]*\)\)\s*)*' # Optional __attribute__ specifier
r'(?:void|int|long|float|double|char|short|unsigned|signed|struct\s+\w+|enum\s+\w+|[a-zA-Z_]\w*[*]*)\s+' # Return type or complex type
r'(?:__attribute__\s*\(\([^)]*\)\)\s*)*' # Another possible __attribute__ specifier
r'([a-zA-Z_]\w*)\s*\(', # Function name
re.DOTALL
)
# Extract all matches
all_function_names = function_pattern.findall(code)
# Remove duplicates
unique_function_names = set(all_function_names)
# Initialize user_defined_functions as an empty set
user_defined_functions = set()
# Regex to find actual function definitions in the code
definition_pattern = re.compile(
r'\b(?:static|extern|inline)?\s*' # Optional specifiers
r'(?:__attribute__\s*\(\([^)]*\)\)\s*)*' # Optional __attribute__ specifier
r'(?:void|int|long|float|double|char|short|unsigned|signed|struct\s+\w+|enum\s+\w+|[a-zA-Z_]\w*[*]*)\s+' # Return type or complex type
r'(?:__attribute__\s*\(\([^)]*\)\)\s*)*' # Another possible __attribute__ specifier
r'([a-zA-Z_]\w*)\s*\([^)]*\)\s*\{', # Function name with arguments and opening brace
re.DOTALL
)
# Extract function definitions
defined_functions = definition_pattern.findall(code)
user_defined_functions.update(defined_functions)
# Filter out library function calls (leave only user-defined functions)
filtered_functions = sorted(user_defined_functions.intersection(unique_function_names))
# Print and return the filtered function names
if 'if' in filtered_functions:
filtered_functions.remove('if')
print(filtered_functions)
return filtered_functions
# Call the function with your uploaded file
extract_user_defined_function_names('./test.c')
이전에는 setup_seccomp 이런것을 못 발견했는데, 지금은 잘 잡습니다.
'Ⅰ. 프로그래밍' 카테고리의 다른 글
파이썬 프로그래밍 (키보드 후킹) (1) | 2024.12.08 |
---|---|
python을 이용한 C 소스코드 추상화 (최신본) (0) | 2024.12.04 |
정규표현식을 이용하여 C 언어에서 함수 추출해보기! (0) | 2024.12.02 |
c 소스코드 추상화 해보기 (변수, 파라미터) (0) | 2024.11.28 |
파이썬으로 이미지 내용을 텍스트로 추출하여 읽기 (ocr) (0) | 2024.11.28 |