(void (*)부프)(;)는 무슨 뜻입니까?
picoCTF에서 바이너리 이용 과제를 해결 중 이 코드를 발견했습니다.
((void (*)())buf)();
어디에buf
는 문자 배열입니다.
나는 도전을 풀었지만 정확히 무엇을 하는지 이해하지 못하는 것 같다.나는 이 실을 보았지만 알아볼 수가 없었다.
무엇인가.((void (*)())buf)();
심술궂은가요?
void (*)()
는 타입입니다.유형은 "미정의 인수를 사용하고 값을 반환하지 않는 함수"입니다.
(void (*)())
는 상기 타입에 대한 타입캐스트입니다.
(void (*)())buf
깁스buf
위의 타입으로.
((void (*)())buf)()
는 함수를 호출합니다(인수 없음).
요컨대:컴파일러에게 치료하라고 지시합니다.buf
함수에 대한 포인터로, 그리고 그 함수를 호출합니다.
포인터buf
는 지정되지 않은 수의 파라미터를 취합하여 무효 함수로 포인터로 변환된 다음 참조 해제(즉, 호출된 함수)됩니다.
형식 캐스트에 이어 함수 호출까지 합니다.일단은buf
를 반환하는 함수에 대한 포인터에 캐스트됩니다.void
괄호의 마지막 쌍은 함수가 호출됨을 의미합니다.
인수를 사용하지 않고 함수를 반환하는 포인터에 문자 배열을 캐스팅합니다.void
를 호출합니다.함수 포인터의 작동 방식에 따라 포인터를 참조 해제할 필요가 없습니다.
설명:
이 "문자 배열"은 실제로 기계 코드의 배열입니다.어레이를 에 캐스팅할 때void (*)()
그것을 호출하면, 어레이내의 머신 코드가 실행됩니다.어레이의 콘텐츠를 제공해주면 분해하여 기능을 알려드리겠습니다.
언급URL : https://stackoverflow.com/questions/59734421/what-does-void-buf-mean
'programing' 카테고리의 다른 글
socket.io에 대한 좋은 초보 튜토리얼? (0) | 2022.10.20 |
---|---|
mysql 오류 : ERROR 1018 (HY000):'.'의 dir를 읽을 수 없습니다(errno: 13). (0) | 2022.10.20 |
Amazon RDS 백업/스냅샷은 실제로 어떻게 작동합니까? (0) | 2022.10.20 |
retroft 2 @path vs @query (0) | 2022.10.20 |
PHP에서 특성을 확장하는 방법이 있나요? (0) | 2022.10.20 |