반응형
cdecl
- 인자 정달 방식:
- 'cdecl'에서는 인자를 스택을 통해 전달한다. 이때 인자들은 호출이 이루어지기 전에 스택에 push 되느넫
마지막 인자부터 첫 번째 인자 순으로 거꾸로 push 된다.
- 'cdecl'에서는 인자를 스택을 통해 전달한다. 이때 인자들은 호출이 이루어지기 전에 스택에 push 되느넫
- 사용하는 이유:
- 호환성 보장: 다양한 컴파일러나 다른 호출 규약을 사용하는 시스템간의 호환성을 보장하기 위해 사용한다.
쉽게 말해 어떤 시스템에서는 기본 호출 규약이 cdecl이 아닐 수도 있다. - 명시적 정의: 명시적으로 cdecl을 사용함으로써, 다름 사람이 코드를 이해하는데 도움을 준다.
- 호환성 보장: 다양한 컴파일러나 다른 호출 규약을 사용하는 시스템간의 호환성을 보장하기 위해 사용한다.
예시
int __attribute__((cdecl)) sum(int a, int b) {
return a + b;
}
참고
앞에 __attribute__가 붙는 이유
- Microsoft Visual C++ 같은 컴파일러에선 'void cdecl abc()'과 같이 'cdecl'을 함수 선언에 포함시켜 지정할 수 있다.
그러나 GCC나 다른 일부 컴파일러에선 이러한 문법이 지원되지 않느다. - GCC컴파일러를 사용할때는 '__attribute__((cdecl))'와 같이 사용해야 한다.
이건 GCC의 확장 기능으로 표준 c나 c++에는 없는 추가적인 기능을 제공한다.
Visual C++ vs. GCC
- 'Visual C++' 에서는 함수 선언에서 'cdecl'을 직접 사용할 수 있따.
void __cdecl cdeclFunction() {
// 함수 구현
}
// Microsoft에 특화되어 있어 조금 제한적일 수 있다.
- GCC에선 ' __attribute__((cdecl))'를 사용해서 동일한 목적을 달성한다.
void __attribute__((cdecl)) cdeclFunction() {
// 함수 구현
}
// 이 방식은 GCC를 사용하는 다양한 플랫폼과 시스템에서
// 호환성을 유지하면서 명시적으로 호출 규약을 설정할 수 있게 한다.
끝
반응형
'hacking > pwnable' 카테고리의 다른 글
[Dream hack] cpp_string (0) | 2025.03.03 |
---|---|
[Assembly] c언어 코드를 어셈블리어로 변환하여 파일에 저장 (0) | 2025.03.02 |
[Dream hack] Welcome Hackers👨💻 (0) | 2025.03.02 |
[Dream hack] Logical Bug: Type Error (0) | 2025.03.02 |
[개념 정리] plt와 got (0) | 2024.11.15 |