2017-11-21 16 views
-1

전 쉘 코드에 멍청한 사람이고 모든 시나리오를 이해하려고합니다. 나는 C에서 내 쉘 코드를 테스트하기 위해 많은 코드를 발견,하지만 놀랍게도 그들은 매우 unreadeable하고 나는 어느 쪽도이 코드를 이해 할 수 없습니다 :이 C 스 니펫은 무엇을 의미합니까?

int (*func)(); 
func = (int (*)()) code; 
(int)(*func)(); 

또는이 하나 :

int (*ret)() = (int(*)())code; 
ret(); 

이인가 Javascript의 eval()에 해당하는? 어떻게 작동합니까?

+1

함수 포인터입니다. –

+0

OP는 C 및 C++에 대해 물어 보려는 뜻인지, 아니면 C? (편집 기록에서 누군가가 C++에 대한 언급을 명백한 이유없이 삭제했음을 알 수 있습니다.) –

+0

이 스 니펫이 C 또는 C++인지 확실하지 않아서 내 이유가 있습니다. 사용자가 C로 변경하도록 수정했습니다. –

답변

2

int (*func)();int을 반환하는 함수 (C++의 매개 변수를 사용하지 않음)에 대한 포인터입니다.

(*func)(); 또는 단지 func();은 가리키는 기능을 호출합니다.

(int (*)()) code;은 컴파일러에게 code이 그러한 기능을 가리키고 있다고 말하는 까다로운 유형의 캐스트입니다. 그렇지 않으나 여전히 함수를 호출하려고하면 프로그램이 유효하지 않으며 어떤 일이 발생할 수 있습니다.

"아무거나"는 실제로 셸 코드를 실행하거나 충돌하는 등의 작업을 포함합니다. 언어 표준은 말하지 않습니다.

+0

당신이 놀랍습니다!, 감사합니다. –