그래서 내 목표는 주요 코드 (중요한 func 또는 다른 클래스 또는 이와 비슷한 것들)의 중요한 부분을 절약 할 수있는 코드를 작성하는 것입니다. 나는 클래스 내에서이 코드를 복사합니다. , 다음 내 프로그램을 추가/일부 코드를 제거하려면 (func, obj, 클래스, ...) 사용자 입력을 사용하여 모든 후 그 코드를 다시 생성하고 클래스의 중요한 부분을 보유하는 클래스를 만들려면 원하는 코드를 자동으로 컴파일하고 그 자체를 삭제합니다.
그래서 나는 위의 모든 계획과 내가 그것을 그 코드를 컴파일 할 부분을 제외하고 알아 낸, 내 코드에 링크 g ++에 어쨌든 무엇입니까? 하지만 난 그 g + + 주요 func, 그 주요 func와 문제를 만들 wouldnt 알아? + 나는 기존 시스템에서 컴파일러를 사용할 수 없으며 별도의 실행 파일로 컴파일러를 사용할 수 없습니다 ...g ++ 자체를 내 프로젝트에 연결하는 방법은 무엇입니까?
답변
컴파일러로 코드를 링크 할 필요가 없습니다. 실행 파일을 컴파일러로 패키지 할 수 있습니다. 코드가 C++ 소스 코드를 생성 한 다음 컴파일러를 호출하여 새로운 실행 파일을 생성 할 수 있습니다.
대부분의 컴파일러는 크기가 큽니다. 이해를 돕기 위해 시스템에 G ++ 또는 MinGW를 설치하십시오.
은 자세한 내용은 실행 파일로 C++와 같은 언어를 번역에 대해 당신에게 정보를 제공 할 것 "컴파일러 디자인 이론"에 대한 인터넷을 검색 할 수 있습니다.
또한, 당신은 운영 체제가 새로운 실행 파일을 실행이 (그리고 현재 인스턴스를 죽일)해야합니다. 이것은 운영 체제의 API에 대한 몇 가지 연구를 필요로합니다.
IMHO는 가장 좋은 방법은 해석 또는 스크립트 언어를 사용하는 것입니다. 다른 방법은 C++ 프로그램에 스크립트 나 스크립트 조각을 실행시키는 것입니다.
편집 1 : 매우 낮은 수준에서 매우 낮은 수준
, 마이크로 코드를 생성 할 필요가있다 (공정 프로세서 명령 바이트).
단계는 다음과 같습니다
- 메모리 에서 몇 가지 알려진 위치에 마이크로과 장소를 생성 (액세스 권한을 가지고 있음을 실행 권한이 있습니다).
- 리턴 코드 을 스택에 푸시하는 것을 기억하여 마이크로 코드로 실행을 전송하십시오.
어려운 부분은 특히 위치 독립적 코드라는 것을 사용하지 않는 한 모든 분기 명령어의 대상 주소를 조정하여 마이크로 코드를 생성합니다.
당신은 마이크로 코드를 생성하는 코드를 작성하는 몇 달 또는 몇 년을 보내거나 (그 소리 또는 G ++ 등) 컴파일러의 조각을 사용하는 방법을 알아낼 수있다.
그게 꽤 많이,하지만 사촌 사용자가 내 코드를 처음으로 아픈 사람이 가진 권한을 가지고 있다고 생각하고 그가 루트라면 내가 그렇지 않으면 생성 된 코드를 실행하기 위해 CPU의 IP 레지스터를 변경할 수 있다고 생각 일부 어셈블리를 코딩하여 생성 부분을 제외하고 모두 처리 할 수있는 긴 jmps를 사용해야합니다. ( – shervin
"마이크로 코드"대신 "기계 코드"라고 생각합니다. 마이크로 코드는 하위 수준의 명령어 집합입니다. 일반적으로 전혀 액세스 할 수 없습니다. –
당신은 실행 파일이 다른 실행 파일에 링크 할 수 없습니다.에 g ++ 링크 할 수 있으며, g의 ++는 (그것이 작동하기 위해 파일의 큰 컬렉션을 필요) 어쨌든 그냥 실행 이상입니다. 가장 좋은 방법은 GCC의 외부 사본을 사용하여로드 할 수있는 동적 객체를 작성하거나 LLVM을 사용하여 코드를 생성하는 것입니다. –
ik 그 g ++는 exe이지만 우리는 미리 컴파일 된 바이너리를 사용할 수 없다 .... 그리고 나는 방금 외설물을 사용할 수 없다고 언급했다 ... pls는 txt를 읽었다 ... llvm은 무엇인가? – shervin
그래, 좋아, 봤 거든 LLVM은 좋은 선택처럼 보이지만 내가 llvm 라이브러리를 사용하여 자신의 컴파일러를 작성해야할까요? – shervin