몇 번 애기한 이슈인데, 메모장2 mod에는 이상한 오류가 있다.
32비트 어플에서 64비트 메모장2 mod로 드래그앤드롭을 하면 오류가 발생한다는 것.
게다가 이 문제는 윈도우 7에선 발생하지 않고, 윈도우 8 이상에서만 발생해서 더욱 아리송했다.
이봐… 내가 떨어뜨리던 파일은 그게 아니라고…
그런데, 블로그 구독자분께서 단비와도 같은 링크를 답글로 달아주셨다.
스택오버플로우에 이 문제에 대한 해답이 올라와 있었던 것이다!
대략의 내용은 아래와 같다.
1. 이 문제는 순전히 윈도우 8 이상의 버그에 의한 것임
2. 컴파일 시 윈도우 8 이상에서 제공되는 High Entropy ASLR을 비활성화하면 간단히 해결 가능
3. 잃어버린 HDROP의 상위 32비트 값을 찾아내려면 GlobalAlloc()를 사용하면 됨
즉, 링크 옵션에서 /HIGHENTROPYVA:NO를 지정하는 것만으로도 문제는 해결된다.
그런데, 보안성이 다소 저하되는 게 걱정되면 HDROP를 아래와 같이 찾아낼 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | case WM_DROPFILES: { WCHAR szBuf[MAX_PATH+40]; HDROP hDrop = ( HDROP )wParam;#if defined(_WIN64) DWORDLONG hDropTemp = ( DWORDLONG )GlobalAlloc(GMEM_MOVEABLE, 0); long long int i; GlobalFree(( HGLOBAL )hDropTemp); hDrop = ( HDROP )(((hDropTemp - 16) & 0xffffffff00000000) | (wParam & 0xffffffff)); for (i = -4 - 16; i < 5 - 16; ++i) { if (((hDropTemp + i) & 0xffffffff) == (wParam & 0xffffffff)) { hDrop = ( HDROP )(hDropTemp + i); break ; } }#endif |
덧1. 이 문제를 무려 3년 넘게만에 해결했음. 3년!
덧2. Notepad2-mod를 진행하는 XhmikosR에게 이 문제를 제기했지만, 말같잖은 답[각주:1]만 들어서 이 해결책은 얘기 안 해줌
덧3. Notepad2의 원작자 Florian Balmer에게 리포트 완료했음
Notepad2-mod r988 (a3ee583) 한국어화 버전 공개 (4) | 2016.11.26 |
---|---|
Notepad2-mod r986 (5393ab8) #6 한국어화 버전 공개 (2) | 2016.11.08 |
Notepad2-mod r986 (5393ab8) #4 한국어화 버전 공개 (1) | 2016.10.24 |
Notepad2-mod의 URL Encode/Decode를 올바르게 적용하기 (2) | 2016.09.14 |
Notepad2-mod r986 (5393ab8) #3 한국어화 버전 공개 (3) | 2016.09.14 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.