0
malloc
과 같은 특정 함수 이름을 검색하려면 다음 예제를 찾았지만 C 소스 파일의 함수 선언에서 모든 함수 이름을 찾고 싶습니다. 그래서 ReturnCode HashCreate(Hash** hash, unsigned int table_size)
의 경우 HashCreate와 행 번호를 찾고 있습니다. 파이썬이 아니기 때문에 꽤 복잡한 것처럼 보입니다. 어떻게해야할까요?pycparser를 사용하여 함수 선언에서 함수 이름을 찾는 방법은 무엇입니까?
from __future__ import print_function
import sys
sys.path.extend(['.', '..'])
from pycparser import c_parser, c_ast, parse_file
class FuncCallVisitor(c_ast.NodeVisitor):
def __init__(self, funcname):
self.funcname = funcname
def visit_FuncCall(self, node):
if node.name.name == self.funcname:
print('%s called at %s' % (self.funcname, node.name.coord))
def show_func_calls(filename, funcname):
ast = parse_file(filename, use_cpp=True,
cpp_path='clang',
cpp_args=['-E'])
v = FuncCallVisitor(funcname)
v.visit(ast)
if __name__ == "__main__":
if len(sys.argv) > 2:
filename = sys.argv[1]
func = sys.argv[2]
else:
filename = 'hash.c'
func = 'malloc'
show_func_calls(filename, func)
완벽한, 내가 필요 정확히. pycparser에게 헤더 파일을 무시하도록 지시 할 수 있습니까? [this] (https://raw.githubusercontent.com/torvalds/linux/master/kernel/sched/core.c)와 같은 파일에 모든 헤더 파일을 추가하는 것은 약간 불편합니다. – JohnnyFromBF
@JohnnyFromBF : http://eli.thegreenplace.net/2015/on-parsing-c-type-declarations-and-fake-headers를 읽으십시오. –