2012-01-13 5 views
5

topcoder.com, SPOJ과 같은 문제 해결 사이트가 있습니다. 비슷한 유스 케이스 (사람들이 저에게 C++ 프로그램 파일을 보내고 싶습니다)를 사용하여 몇 가지 제한 사항을 적용하고 싶습니다. 그 중g ++ (gcc) 또는 clang (llvm)의 인라인 어셈블리 금지

하나는 :

가 어떻게 그런 금지를 적용 할 수 있습니다 "인라인 어셈블리를 사용 할 수 없습니다"? 컴파일러 플래그와 같은 더 똑똑한 방법이 있습니까? -하지만 소스 코드에서 구문을 검색하는 것보다 유용한 것은 없습니다.

사람들을 g ++ 또는 clang으로 제한 할 수 있습니다. 리눅스에서 상황이 진행되고 있습니다.

+0

왜 그렇게 하시겠습니까? 인라인 asm을 제한하면 보안이 걱정된다면별로 도움이되지 않습니다. – servn

+0

@ servn 확인. 하지만 나는 보안에 대해 걱정할뿐만 아니라 공정한 C/C++ 경쟁에 대해 걱정하고 있습니다. 나는 우리가 그러한 규칙을 결정했기 때문에 사람들이 asm을 사용하지 못하도록하고 싶습니다. 그러한 정책의 프로세스를 자동화하고 싶습니다. 나는 그것이 완전한 해결책이 아니며 더 많은 것을 필요로한다는 것을 이해합니다. 그것을 지적 주셔서 감사합니다. 어쩌면 아이디어가 더 있을까요? 보안에 관심이 있다면 내 다른 질문을 확인하십시오 : [Security.SE] (http://security.stackexchange.com/users/4077?tab=questions) –

답변

0

-fno-asm 플래그를 찾는 것처럼 보입니다.

__asm__을 수행하는 것보다 asm을 수행하는 것 같지만 -D__asm__=something_that_will_error에 추가 할 수도 있습니다.

또한 -fno-gnu-keywords에서 C++의 asm을 끕니다.

+1

gcc 4.4.6 Linux 맨 페이지에서는 이것이 사용 가능하지 않음을 의미합니다. '__asm__'. – Alnitak

4

방법에 대해 :

% gcc -Dasm=error -D__asm__=error 
+0

어떻게 작동합니까? 나는 매크로가'asm','__asm__'이라는 이름을 가지고 있다는 것을 이해합니다. 섀도 잉 빌트인 키워드가 허용됩니까? 함수 호출을 금지하기 위해 동일한 작업을 수행 할 수 있습니까 (예 : "system()")? 안전한 솔루션입니까 - 해결할 방법이 없습니다 (해킹)? –

+1

@GrzegorzWierzowiecki 전처리 기는 컴파일러 전에 코드를 가져오고 키워드에 대한 지식이 없으므로 변경 될 수 있습니다. 코드 내에서 간단한 #undef asm이이를 수행 할 수 있습니다. 그래도 쉽게 찾을 수 있습니다. – Alnitak

+0

내가 [국제 난독 화 C 코드 경연 대회] (http://www.ioccc.org/)를 볼 때마다 나는'#undef asm'과 같은 것들을 난독화할 수있는 방법이 점점 더 두렵다. –

관련 문제