picoCTF에서 이진 악용 문제를 해결하고 다음 코드를 보았습니다.
((void (*)())buf)();
buf
문자 배열은 어디에 있습니까 ?
나는 도전을 해결했지만 정확히 무엇을하고 있는지 이해할 수없는 것 같습니다. 나는 보았다 이 스레드 그러나 나는 그것을 만들 수 없습니다.
무슨 ((void (*)())buf)();
뜻입니까?
답변
void (*)()
“유형을 결정하지 않고 값을 반환하지 않는 함수의 포인터”인 유형입니다.
(void (*)())
위 유형에 대한 유형 캐스트입니다.
(void (*)())buf
buf
위 유형으로 캐스트 합니다.
((void (*)())buf)()
함수를 호출합니다 (인수 없음).
간단히 말해서 : 컴파일러에게 buf
함수에 대한 포인터로 취급 하고 해당 함수를 호출하도록 지시합니다.
답변
포인터 buf
는 지정되지 않은 수의 매개 변수를 사용하여 void 함수로 포인터를 변환 한 다음 역 참조됩니다 (예 : 함수 호출).
답변
typecast이고 함수 호출입니다. 먼저을 buf
반환하는 함수에 대한 포인터로 캐스트됩니다 void
. 마지막 괄호 쌍은 함수가 호출되었음을 의미합니다.
답변
인수를 취하지 않고를 반환하는 함수에 대한 포인터에 문자 배열을 캐스트 void
한 다음 호출합니다. 함수 포인터의 작동 방식으로 인해 포인터 역 참조가 필요하지 않습니다.
설명:
“문자 배열”은 실제로 기계 코드의 배열입니다. 배열을 a로 캐스팅 void (*)()
하고 호출하면 배열 내부의 기계어 코드가 실행됩니다. 배열의 내용을 제공 한 경우이를 분해하여 수행중인 작업을 알려줄 수 있습니다.
답변
