본문 바로가기

Research

calling convention, name mangling, C/C++ DLL Export 에 대해. 제목이 긴데... 윈도우 파트에만 한정하기도 그렇고... 하여튼.이런 것들이 연관되어서 문제가 꽤 있었고 골머리를 오래 싸맸다.C++ 로 만든 DLL 을 C 에서 사용하고 싶다거나C 로 만든 DLL 을 C++ 에서 사용하고 싶다거나.지금 생각하면 큰 문제는 아닌 것 같은데..; 정리 삼아. 먼저 Calling Convention 에 대해 간단히 요약해보자.주로 사용되는 stdcall / cdecl 과 fastcall 이라고 볼 수 있겠다.c++ 을 자주 사용하다 보니 thiscall 도 자주 보게 된다만 잠시 논외로 하고.. 글을 보는 사람들 모두가 알고 있겠지만, 이 Calling Convention 이 중요하게 다루어지는 이유는함수를 호출함에 있어서 스택의 정리 주체가 누구냐 ?stdcall 은 CA.. 더보기
프로세스별 핸들 목록 리스팅 Process Explorer 에서 프로세스를 선택하면 출력되는 핸들 리스트 구현하려 한다. NtQuerySystemInformation 함수에 enumerate 된 SystemExtendedHandleInformation 인자를 패스define 값은 64 시스템 동작 환경에 따라 NtQuerySystemInformation 에서 요구하는 버퍼 크기가 동적으로 변경된다 크게 두 개의 구조체를 사용하며,- SYSTEM_EXTENDED_HANDLE_INFORMATION / PSYSTEM_HANDLE_TABLE_ENTRY_INFO_EX - Process Explorer 에서 나오는 인자들의 종류는 크게 Key, Directory, File, WindowStation, Section, Mutant 등이 있다.일.. 더보기
LPTHREAD_START_ROUTINE 은 stdcall 이어야만 하는가 beginthread 의 파라미터는 __cdecl 이어야 하고beginthreadex 의 파라미터는 __stdcall 이어야 하고CreateThread 의 파라미터는 __stdcall 이어야 하고.__cdecl 로 작성된 함수를 스레드로 사용하려 하는데 파라미터정리를 어떻게 처리해주지 ? 갑자기; 함수 선언/정의 시에 기입하는 콜링 컨벤션의 값의 목적을 정확히 알고 싶었다.생 뻘짓 int __cdecl funcB(int a, int b){ return a+b };typedef int (__cdecl *pfB)(int, int); int __stdcall funcA(){pfB fp_B = funcB;fp_B();} funcA 에 써둔 __stdcall 이 영향을 미치는 범위가 어디까지인가 하는 착각에 빠졌.. 더보기
스크랩 - C++상에서 발생하는 name mangling에 관한 내용 보호되어 있는 글입니다. 더보기
NTSTATUS 망할 NTSTATUS STATUS_SUCCESS 때문에 삽질을 삽질을-_-좋은글 있길래 갖고 왔다블로그 내용도 아주 멋짐. http://kirkshoop.blogspot.kr/2011/09/ntstatus.html NTSTATUSNTSTATUS was defined for code native to the Windows NT operating system. It was a part of the very clean separations built between the core OS and the various subsystems where user code was expected to run (POSIX, WIN32, WIN16/DOS, OS/2). Over time it has begun to leak .. 더보기
[만들어보기] 가비지코드 크리에이터 원하는 코드abcdefg가 있으면 쌍 안에 적절히 배치되어야 함 push x pop ysub x, y add y, xshift 연산은 원하는 코드 내의 레지스터를 제외해야 한다 더보기
[작성중] 디버거에서의 멀티스레드 디버깅 으아예아 더보기
윈도우 네임스페이스 / 디바이스 심볼릭 링크 http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx Namespaces 윈도우 API 에서 사용되는 네임스페이스 규칙에는 NT namespaces 와 Win32 네임스페이스, 두 가지 카테고리가 있다. NT 네임스페이스는 Win32 네임스페이스를 넘어서, Win32 서브시스템을 포함한 다른 서브시스템과 네임스페이스에서도 존재할 수 있도록 더 low 레벨에서 디자인되었다. POSIX 는 다른 서브시스템의 다른 예인데, POSIX 는 NT 네임스페이스의 꼭대기에서 빌드되었다(?). 초기의 윈도우에서도 커뮤니케이션 포트나 디스플레이 콘솔과 같은 특정 디바이스들의 이름들에 대해 이미 다양한 정의들을 해 두었다. Win32 Device Namespace.. 더보기