해결된 질문
작성
·
40
0
안녕하세요 강사님
MyMessageBox안에서는 MessageBoxW를 쓴 이유를 제가 제대로 이해한게 맞나요?
MessageBoxA로 바꾸니까 stack overflow 가 생기는것 까지는 확인하였습니다.
iat hook으로 인해
MessageBoxA 호출 -> IAT 에서 메모리 참조 -> MyMessageBox -> MessageBoxA호출 -> .. 무한 반복
될뻔한것을
MessageBoxA 호출 -> IAT 에서 메모리 참조 -> MyMessageBox -> MessageBoxW호출 후 그냥 return 0 -> main으로 무사히 돌아옴
이렇게 된건가요?
답변 2
0
네, 생각하시는 것이 맞습니다. 그런 문제를 해결하려고 보통은 IAT에 값을 Overwrite 하기 전에 백업 해두었다가 MyMessageBox()에서 백업된 주소를 호출하는 방식을 사용합니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. 도현님.
질문 주신 IAT Hook 기술에서 MyMessageBox
함수 내에서 MessageBoxW
를 사용하는 이유에 대해 설명드리겠습니다.
MyMessageBox
함수 내에서 MessageBoxA
대신 MessageBoxW
를 사용하는 이유는 무한 호출(loop)을 방지하기 위해서입니다. MessageBoxA
를 사용하면 질문하신 것처럼 IAT Hook에 의해 다시 MyMessageBox
로 돌아가므로, 이는 결국 무한 호출로 인해 스택 오버플로우를 유발하게 됩니다.
이 문제를 해결하기 위해 MessageBoxW
를 사용한 것입니다. MessageBoxW
는 이 Hook 환경에서 일반적으로 Hook 되지 않으므로 그대로 호출이 완료되고, MyMessageBox
는 종료되어 main
으로 안전하게 돌아가게 됩니다.
즉, 정리하자면:
- MessageBoxA
는 IAT Hook을 통해 MyMessageBox
로 연결되므로 스택 오버플로우를 유발합니다.
- MessageBoxW
는 직접 Windows API를 호출하므로 무한 루프를 피할 수 있습니다.
추가적으로 도움이 될 수 있는 질문이나 자료들을 확인해 보세요:
MessageBoxA
와 MessageBoxW
의 동작 차이 설명저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.