본문 바로가기

전체 글

__attribute__((visibility("default"))) __attribute__ 속성은 gcc 에 컴파일을 더 유연하게 만들어주는 속성이라고 한다. ELF의 symbol visibility 속성은 dynamic linker의 symbol resolution을 도와주는 역할을 한다. 간단히 말하면, 외부로 공개된 전역 심볼들을 찾을 때 특정 심볼을 제외시키거나 먼저 찾도록 지정할 수 있다. 공유 라이브러리 구현 시 이러한 기능을 잘 활용하면 좀 더 좋은 성능을 얻을 수 있다. visibility 속성은 다음과 같은 4가지 중의 하나로 설정할 수 있다. default: 기본값이다. visibility는 고려하지 않고 해당 심볼(의 바인딩)이 global인지 static(local)인지 만을 이용한다. hidden: 주로 사용되는 속성이다. 해당 심볼을 외부로 공.. 더보기
윈도우 버전 구하기 (두번째) EXE 에서는 이 포스팅에서 나온대로 manifest를 추가하면 정상적으로 윈도우 버전을 가져 올 수 있다. 하지만 DLL로 모듈을 생성할 경우 EXE에 종속된 manifest를 따라가기 때문에 내가 의도한 대로 윈도우 버전을 얻을 수 없다. 이 경우 WMI를 통해서 정상적인 윈도우 버전을 얻을 수 있다. #include #pragma comment(lib, "wbemuuid.lib") bool CreateLocalConnection(bool set_blanket, IWbemServices** wmi_services) { base::win::ScopedComPtr wmi_locator; HRESULT hr = wmi_locator.CreateInstance(CLSID_WbemLocator, NULL, C.. 더보기
윈도우 버전 가져오기 win32에서 윈도우 버전을 가져오기 위해서는 일반적으로 GetVersionEx를 사용한다. 그러나 윈도우 버전이 올라갈수록 이 함수가 정상 동작을 하지 않는다. 이 함수를 정상 동작하게 하기 위해서는 EXE에 추가적인 manifest를 임베딩 시키면 정상적으로 동작을 하게 된다. 위 manifest를 별도로 저장후 visual studio 프로젝트 설정에 추가하면 정상 동작한다. 더보기
엣지에서 IE 쓰지 않기 윈도우 10에서는 엣지 브라우저가 탑재되어 있지만 엣지에서 국내 사이트를 사용할려면 아래와 같은 페이지를 볼 수 있다. 간단한 설정 추가로 이런 페이지를 보지 않는 방법이 있다. 주소창에 about:flags 라고 입력하면 개발자 설정이라는 페이지가 보인다. 그 페이지에서 "Microsoft 호환성 목록 사용" 체크를 해제 할 경우 위와 같은 페이지를 보지 않고 엣지로만 사용이 가능하다. 물론 MS에서 IE에 의존적인 기능들이 들어 있기 때문에 IE를 사용하도록 처리한 부분이니 꼭 필요한 사람들만 사용해 보자. 더보기
자바스크립트로 UA 변경하기 var _newUA = navigator.userAgent.replace(/ ?Swing\/[0-9.]*/, '');Object.defineProperty(window.navigator, "userAgent", { get: function() {return _newUA}}); // "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Swing/2.3.0.0"함수 호출 후// "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/5.. 더보기
windbg로 특정 dll 함수 호출 체크하기 windbg로 해당 프로그램을 로딩한다.bp module_name!detect_function 으로 해당 함수에 브레이크 포인터를 건다.해당 모듈이 로드하지 않은 경우 sxe ld modulename.dll 을 하여 모듈 로드 시점에 bp를 걸어 모듈을 로딩 한 후 함수에 bp를 걸어 확인한다. 더보기
윈도우 프로젝트에 젠키스 적용하기 아래 링크 참고http://phosphoros.tistory.com/34 더보기
PDB 파일 1GB 제한 늘리는 방법 아래와 같은 경우로 pdb 파일이 생성되지 않고 에러를 뱉는 경우가 있다.error writing to program database 'd:\src\chrom\src\build\Debug\chrome.dll.pdb' 나도 처음 알았지만 pdb 파일이 1GB를 초과하는 경우 생성이 되지 않는 케이스이다.크로미움 포럼엔 이미 같은 이슈로 리포팅되어 있다.https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/chromium-dev/9mxFabym1B8 위와 같은 이슈의 해결 방법은 static-library를 shared-library로 변경하는 방법이 있고편법으로 pdb파일의 용량 제한을 늘리는 방법이다.방법은 아래에 나와 있다.https:/.. 더보기