나는 C에 대한 추상 인터프리터를 만들려고 노력 중이다. 아마도 전체 문법이 아니라 아마도 그 부분 집합 일 것이다. 나는 이전에 어떤 언어를 사용할 것인지 질문했다. 더 진행하기 전에이 추상 해석이 어떻게 작동하는지 알고 싶습니다.Abstract Interpreter는 어떻게 작동합니까?
나는 위키 링크와 강의 노트 링크를 거쳤습니다. 나는 그것의 이론적 근거와 이론을 이해했다. 나는 내 분석을 해냈다. 내가 완전히 이해할 수없는 부분은 코드를 해석하는 방법입니다. 즉, 초기 코드가 있습니다. 나는 그것을 전처리했다. 필자는 분석에 필요한 코드를 정규화했다. 이제 코드를 한 줄씩 실행하고 실행을 계속하면서 데이터를 추출하려면 어떻게해야합니까? (이것이 불가능한 것인지 아니면 제 목표를 달성 할 수있는 프로그램을 제대로 수행 할 수있는 방법이 있는지 말해주십시오.) 나는 동적으로 할당 된 공간의 메모리 주소, 함수 호출의 반환 주소와 같은 정보를 수집하는 것을보고있다.
나는 이전에 CIL로 제안되었는데, CIL은 많은 변형을 처리하는 정규화 된 형식으로 코드를 변형하는 변형 도구이지만 내 문제와 관련된 정보는 얻을 수 없었다.
제 질문은 정보를 한 줄씩 어떻게 추출하고 어떤 언어를 사용하는 것이 좋습니까? 명령형 언어 또는 함수형 언어? 나는 이것에 관한 정보로 꽤 며칠 동안 인터넷 검색을 해왔지만 아무 쓸모가 없다. 모든 링크도 매우 높이 평가됩니다. 감사.
편집 : 아직 몇 가지 의구심이 있습니다. 가상 환경을 구축하기 위해 노력하고 있습니다. 제가 뭘하려고하는지 설명해 드리겠습니다. 토론에 도움이 될 것입니다. 나는 기본적으로 포인터 연산에 집중하는 포인터 분석을 기본적으로 시도하고있다. 이제 정수형 포인터가 있고 포인터 산술을 한 다음 포인터가 여전히 유효한 데이터를 가리키는 지 확신 할 수 없다고 가정합니다.
당신이 말하는 바에 따르면 변수에 공백을 할당해야하지만 그 값은 무엇인지 알 수 있습니다. 내가
int a=10;
int *p = &a;
p = p+4;
아래 여기의 값과 일정 같은이있는 경우 '4'알려져있다. 사용자 또는 파일로부터 가치를 얻을 수 있다면 어떨까요? 이 경우 실제 프로그램을 실행해야합니다. 동시에 주소와 같은 데이터를 캡처해야합니다. 아래
int *p =(int *) malloc (sizeof(int));
*p= 15;
cout<<*p;
p = p+ino//some user input value;
cout<<*p;
"추상적 해석"이란 말은 프로그램에서 수행 할 수있는 모델을 모델링하려고하는 프로그램 분석 기술을 의미합니까? 아니면 컴퓨터 코드로 컴파일하지 않고 C 코드를 실행하는 방법입니까? 전자의 경우 어떤 분석을 수행하려고합니까? 후자의 경우에, 당신은 무엇을 당신을 위로 트리핑에 정성 들일 수 있습니까? – templatetypedef