일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 윈도우 커널 드라이버
- ucrtbase.dll
- Network Byte Order
- windows kernel debugging
- 윈도우 커널 디버깅
- Windows Kernel
- pwnable
- apphelp.dll
- vcruntime140.dll
- 개발하기
- C언어 패킷캡쳐
- IAT Hooking
- hacking
- Windows Kernel Driver
- Windows
- 네트워크 바이트 오더
- arudino
- Msvcrt.dll
- pcap packet capture
- packet capture
- 시스템해킹
- vcruntime.dll
- 포너블
- HackCTF
- Windows Kernel Debug
- 윈도우 커널
- 개발 환경 준비
- pcap packet
- 해킹
- 바이트 오더
- Today
- Total
목록내 노가다 목록 (2)
미친해커
기본적으로 Visual Studio의 MSVC로 컴파일을 진행하면 vcruntime140.dll, ucrtbase.dll을 사용하는 것을 확인할 수 있다. 이는 Windows SDK에 있는 라이브러리를 사용하는 것으로 알고 있는데, 해당 DLL을 사용하면 다른 윈도우에서 프로그램을 실행했을 때 ucrtbase.dll과 vcruntime140.dll이 없으면 프로그램이 동작하지 않는 문제가 발생한다. 물론 프로그램을 배포할 때 DLL을 함께 배포하면 문제 없지만 이는 반드시 프로그램을 실행하기 전에 DLL을 배포해야 한다는 귀찮음이 존재한다. 하지만 모든 윈도우에는 기본적으로 msvcrt.dll이 존재하고 msvcrt.dll과 ucrtbase.dll, vcruntime140.dll에 있는 함수가 다르지 않..
Visual Studio의 컴파일러인 MSVC로 컴파일을 하면 가끔 이런 이상한 코드가 추가되는 경우가 있다. 위 이미지 처럼 모든 함수가 참조되어 있는 것을 확인할 수 있다. 그럼 해당 바이너리 내에서 호출하는 모든 함수들이 이 jmp를 거쳐서 호출되게 된다. 필자는 개인적으로 이걸 매우 싫어하는데 지금까지 이 때문에 Mingw를 애용했다고 해도 과언이 아니다. 하지만 이제야 해결 방법을 깨달았다. 이는 MSVC의 LINK의 최적화 옵션을 설정하면 된다. [프로젝트 속성] -> [링커] -> [최적화] -> [참조] -> [/OPT:REF] 이 옵션을 설정해주면 저런 참조 코드가 생성되지 않는다. 커맨드 라인으로 한다면 다음과 같다. cl.exe main.c /link /OPT:REF