Visual Studio 2013 의 너무나 뛰어난 최적화 기능에 감탄을 금치 못했습니다.
( 작년까지만해도 2008 을 사용하고 있어서 전혀 몰랐습니다만... )
Thread Local Storage(TLS) 를 넣었는데, 이것이 최적화되어 사라져버리는 현상이 일어났습니다 !
문제의 코드
#include <windows.h>
#pragma comment(linker,"/INCLUDE:__tls_used")
void __stdcall callback_func(...){ MessageBoxA(NULL,"Hello world",NULL,MB_OK); }
#pragma data_seg(".CTR$XLB") PIMAGE_TLS_CALLBACK p_tls = callback_func; #pragma data_seg()
int main(void){ system("pause"); return 0; }
|
혹시 문제를 발견하셨나요 ?
문제는 . . .
프로그램 진입점(main) 함수 이하로 p_tls 변수가 사용된 흔적이 없어
p_tls 변수와 callback_func 함수가 최적화로 사라집니다 !!
이 너무나 훌륭한 최적화 기능에 1시간동안 씨름에 붙었습니다 -_- ; ; ;
해결 방법은 ?
솔루션 탐색기 창을 통해 단일 파일의 경우 위와 같이 파일 하나를 오른쪽 마우스 클릭하거나
프로젝트 혹은 솔루션 크기일 경우 프로젝트나 솔루션을 오른쪽 마우스 클릭해서
속성을 들어간 후
'C/C++ > 최적화 > 전체 프로그램 최적화' 를 '예(/GL)' 에서 '아니요' 로 변경하시면 됩니다.
네이버 카페 배경음악 끄는 방법 외 여러가지. (2) | 2015.10.15 |
---|---|
성기사 디코드 루틴. (0) | 2015.09.19 |
오시오키나마이키갸루 암호화 루틴 (0) | 2015.08.31 |
gotoxy in windows python (0) | 2015.08.30 |
네○파라 vol.0 암호화 루틴 (0) | 2015.08.20 |
""" Python 2.7 pseudo-code Present by FORE """
decode_key = []
def decode(buf,adlr):
|
성기사 디코드 루틴. (0) | 2015.09.19 |
---|---|
너무나 뛰어난 최적화 기능. (0) | 2015.09.06 |
gotoxy in windows python (0) | 2015.08.30 |
네○파라 vol.0 암호화 루틴 (0) | 2015.08.20 |
if 와 매크로와 세미콜론의 위험성. (0) | 2015.07.27 |
[ありがとうございます!!]
import ctypes
class CUSTOM_CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure):
def GetConsoleCursorPos():
|
일단 검색해서 제대로 안나오길래 어렵지 않을거 같아서 직접 구현함.
언젠가 또 이걸 찾을 날이 오겠지, 으 . . .
p.s > 왜 from ctypes import * 을 날리지 않았냐 라고 묻는다면
이렇게 길어질줄 몰랐다고 답하겠습니다.
너무나 뛰어난 최적화 기능. (0) | 2015.09.06 |
---|---|
오시오키나마이키갸루 암호화 루틴 (0) | 2015.08.31 |
네○파라 vol.0 암호화 루틴 (0) | 2015.08.20 |
if 와 매크로와 세미콜론의 위험성. (0) | 2015.07.27 |
IE UTF-8 인코딩과 encodeURIComponent 의 이야기. (2) | 2015.05.25 |
""" Python 2.7 pseudo-code Present by FORE """ class neko(Structure): _fields_ = [ ('Signature',c_uint), # "neko" ('ullStructSize',c_ulonglong), ('dwAdlr32',c_uint), ('wFileName',c_ushort), ('FileName',c_wchar_p) ]
def get_key(adlr):
def decode(buf,adlr):
|
이전이랑 달라진게 몇개 있다면
1. Signature 이 바뀜.
2. 첫 바이트를 두 번 XOR 암호화시킴.
정도인 덧 . . . . . . ?
오시오키나마이키갸루 암호화 루틴 (0) | 2015.08.31 |
---|---|
gotoxy in windows python (0) | 2015.08.30 |
if 와 매크로와 세미콜론의 위험성. (0) | 2015.07.27 |
IE UTF-8 인코딩과 encodeURIComponent 의 이야기. (2) | 2015.05.25 |
미연시계의 횡포. 2***AME (0) | 2015.05.08 |
간만에 프로그램에 손대고 있는데, 함정에 빠져버렸다 -_- ;;;
if ( nTest ) ListView_SetItemText(hListView,~); else ListView_SetItemText(hListView,~);
|
[ 문제의 구문 ]
위와 같이 적어주면
error C2181: if와 짝을 이루지 않는 잘못된 else문입니다. |
신나는 문구를 띄워주신다.
제일 먼저 ListView_SetItemText 매크로는 매크로란 점이다 -_- ;
https://msdn.microsoft.com/en-us/library/windows/desktop/bb775105(v=vs.85).aspx
을 보면 알겠지만, 매크로지만 함수와 같이 완벽히 작동하는거처럼 보여주신다.
( 위 MSDN 에도 매크로 뒤에 세미콜론이 붙어있다. )
하지만, 매크로는 매크로일 뿐 . . .
#define ListView_SetItemText(hwndLV, i, iSubItem_, pszText_) \
|
위 매크로를 보면 { } 저주받을 중괄호가 존재한다.
이 매크로를 따라 맨 처음 구문을 다시 적어보면
if ( nTest ) { LV_ITEM _macro_lvi;\ else { LV_ITEM _macro_lvi;\
|
대충 이와 같이 적용된다.
if 문의 중괄호 끝에 아름답게 빨간색으로 빛나는 세미콜론이 보이신다.
즉, if ( ~ ){ }; 으로 이미 if문이 끝나버린 상태에서 else 문이 선언되어 앞에 있는 if 문이 인식을 못하는 부분이다.
따라서, 매크로를 사용시엔 반드시 if, while, for 와 같은 구문에는 중괄호 안에 매크로를 적거나
if, while, for 가 아닌 구문에만 사용하거나, 적당히 경우를 봐서 세미콜론을 안붙히는게 방법일 수 있겠다.
결론적으로 그냥 닥치는데로 중괄호 붙히는게 답일 듯 하다.
gotoxy in windows python (0) | 2015.08.30 |
---|---|
네○파라 vol.0 암호화 루틴 (0) | 2015.08.20 |
IE UTF-8 인코딩과 encodeURIComponent 의 이야기. (2) | 2015.05.25 |
미연시계의 횡포. 2***AME (0) | 2015.05.08 |
엔스크립트에 대해서 잠깐 분석해봄. (0) | 2015.05.01 |
|
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |