'전체'에 해당되는 글 85건

  1. 2010.09.08 The Computer Language Benchmarks by 지영아빠
  2. 2010.05.06 HowTo: Automount NTFS Drives by 지영아빠
  3. 2010.04.16 ubuntu 네트웍 2개의 NIC카드의 라우팅 대역을 분리 by 지영아빠
  4. 2009.12.24 또 다시 새로운 시작 by 지영아빠
  5. 2009.11.30 vim 에서 dostounix효과 by 지영아빠
  6. 2009.11.30 클라우드 컴퓨팅 관련자료 by 지영아빠
  7. 2009.09.14 PEB(Process Environment Block) by 지영아빠
  8. 2009.08.19 dladdr, dlclose, dlerror, dlopen, dlsym, dlvsym (1) by 지영아빠
  9. 2009.08.18 현재 Thread의 TEB를 얻는 방법 by 지영아빠
  10. 2009.08.10 TEB(Thread Environment Block) by 지영아빠


저작자 표시
Posted by 지영아빠

HowTo: Automount NTFS Drives

출처: http://ubuntuforums.org/showthread.php?t=785263

Ok, I decided to write this - because over the last week or 2 I've been seeing a lot of threads asking how to AutoMount drives in Ubuntu. Most of the time these also happen to be NTFS drives 

I know what it's like - I still dual boot too  So anyway - here's how to do it the nice easy way 

NB: Please note that there are some images attached just for you 


Fire up a terminal, to do this click Applications > Accessories > Terminal
Then type (or copy/paste) the following - 1 line at a time
sudo aptitude update
sudo aptitude install ntfs-config
Ok so when that returns you to user@pcname, that should be it installed 

Next, make sure you have NO drives mounted (they'll usually appear on your desktop). And then run the program from Applications > System Tools

Note: In Ubuntu 9.04 (Jaunty) it appears that the configuration tool has moved to System > Administration.

Enter your password when prompted - and then choose the drives that you want to be automounted. Click Apply.

Now simply make sure that "Enable Write Support for Internal Drives" and click OK.

Enjoy your automounted NTFS Drives 

Note: If you want to undo this for whatever reason, StolenPie posted a walkthrough later in the thread  So kudos for that!
Attached Images
File Type: jpg install.jpg (107.9 KB, 1601 views)
File Type: jpg ntfsconfig.jpg (123.4 KB, 2018 views)
File Type: jpg options.jpg (123.8 KB, 1759 views)

Last edited by Joeb454; November 2nd, 2009 at 04:52 PM.. Reason: Added how to undo
저작자 표시
Posted by 지영아빠
ubuntu 네트웍 2개의 NIC카드의 라우팅 대역을 분리하는 방법

apt-get update

apt-get upgrade

apt-get dist-upgrade

gtf 1024 768 60




(ip) route flush all

(ip) route add -net x.x.x.x/yy gw z.z.z.z dev eth0
(ip) route del default gw x.x.x.x


- 부팅시에 정적으로 설정이 필요한 경우에는
1) /etc/rc.local 에 static route 정보를 추가함
2) /etc/network/interface에서 gateway 정보를 제거함(static route의 경우)


참조: http://linux-ip.net/html/linux-ip.html

저작자 표시
Posted by 지영아빠
오늘 퇴직의사를 밝혔습니다.

면담을 통해서 저에 대한 사람들의 반응을 봤는데요..
그 의견들을 통해서...
내가 그동안 열심히 살았구나 하는 생각을 하게되었습니다.

이것이 저의 재산이 되는 것 같습니다.
새로운 곳에서는 개발조직을 이끌게 되었습니다.

앞으로 더욱 좋은 일만 있기를 바라면서..

주말연휴를 즐겨야 하겠습니다.

내년 이맘때는 어떤 생각을 하고 있을까.. 궁금해 집니다.

저작자 표시

'회사생활' 카테고리의 다른 글

또 다시 새로운 시작  (0) 2009.12.24
짐정리  (1) 2009.07.20
새로운 도전  (0) 2009.07.17
선택  (0) 2009.07.16
좋은 회사의 조건  (0) 2008.04.16
마이리슨 서비스 폐지  (0) 2008.01.10
Posted by 지영아빠
알고나면 쉬운데.. 자꾸 까먹네요..



나머지는 Vim의 tip페이지에 자주사용되는 case를 참고하세요..

참고: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix
저작자 표시

'관심분야 > ' 카테고리의 다른 글

vim 에서 dostounix효과  (0) 2009.11.30
Posted by 지영아빠
최근 클라우드 컴퓨팅 관련자료가 많이 보이고 있습니다.
제가 알고있는 자료를 정리해 봅니다. 공부하시는데 도움이 되시길..
그 외의 많은 자료는 위키피디아에 찾아보시면 많이 있습니다.
보통은 Hadoop과 HDFS관련 자료를 가지고 공부를 하게되지요..

1. 클라우드 컴퓨팅 개념관련
 - 클라우드 컴퓨팅 개괄 : 위키피디아
 - Architectural manifesto: An introduction to the possibilities (and risks) of cloud computing
 - Gruman, Galen (2008-04-07). "What cloud computing really means". InfoWorld.
What's In A Name? Utility vs. Cloud vs Grid
 - Cloud Computing: The Evolution of Software-as-a-Service
 - Guide To Cloud Computing

2. 알고리즘관련 (MapReduce, GFS, Hadoop, HDFS)
  - MapReduce : 위키피디아
  - Apache Hadoop 웹 사이트 : MapReduce 기본개념을 이해할 수 있음
  - Distributed computing with Linux and Hadoop
  - Cloud Computing with Linux
  - Apache HDFS 웹사이트: HDFS 관련 API와 개념을 파악할 수 있음(GFS에 대비되는 개념)
  - GFS: Google File System 위키피디아 설명
  - MapReduce 논문: Google 의 MapReduce 관련 논문
  - Google File System 논문
  - HDFS설명

3. 커뮤니티 관련
  - Hadoop 한국 유저그룹
  - http://groups.google.co.kr/group/hadoop-community/
  - YDN Hadoop
  - Yahoo Developers Network Hadoop Blg
  - Yahoo Korea Developers Network Blog
  - http://cloudera.com/

4. 세미나 및 자료
  - [동영상] Hadoop 유저그룹 세미나 – Terapot: Hadoop과 Lucene 기반의 대용량 이메일 아카이빙
  - VMWare image for hadoop is available (by Google) at http://dl.google.com/edutools/hadoop-vmware.zip
  - Hands-on Hadoop for cluster computing
  - Map Reduce for Machine Learnning: Map-Reduce for Machine Learning on Multicore
  - Hadoop for Machine Learning:Apache Mahout
  - Machine learning in bioinformatics
  - Hadoop Sorts a Petabyte in 16.25 Hours and a Terabyte in 62 Seconds
  - Cloudera의 Hadoop 교육을 위한 가상머신(VMWare)
  - Cloudera's Basic Hadoop Training (online)
  - Dewitt과 Stonebreaker의 Google MapReduce에 대한 이슈제기

5. 도서
  - Hadoop: The Definitive Guide
저작자 표시
Posted by 지영아빠
지난번 TEB에 이어 이번에는 PEB에 대해 자료를 업데이트 합니다.
PEB는 Process Environment Block으로 Windows Kernel에서 Process에 대한 환경정보를 담고있는 구조체입니다.

typedef struct _PEB {
  BOOLEAN                   InheritedAddressSpace;          /*  00 */
  BOOLEAN                   ReadImageFileExecOptions;       /*  01 */
  BOOLEAN                   BeingDebugged;                  /*  02 */
  BOOLEAN                   SpareBool;                      /*  03 */
  HANDLE                    Mutant;                         /*  04 */
  HMODULE                   ImageBaseAddress;               /*  08 */
  PPEB_LDR_DATA             LdrData;                        /*  0c */
  RTL_USER_PROCESS_PARAMETERS *ProcessParameters;           /*  10 */
  PVOID                     SubSystemData;                  /*  14 */
  HANDLE                    ProcessHeap;                    /*  18 */
  PRTL_CRITICAL_SECTION     FastPebLock;                    /*  1c */
  PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine;             /*  20 */
  PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine;           /*  24 */
  ULONG                     EnvironmentUpdateCount;         /*  28 */
  PVOID                     KernelCallbackTable;            /*  2c */
  PVOID                     EventLogSection;                /*  30 */
  PVOID                     EventLog;                       /*  34 */
  PVOID /*PPEB_FREE_BLOCK*/ FreeList;                       /*  38 */
  ULONG                     TlsExpansionCounter;            /*  3c */
  PRTL_BITMAP               TlsBitmap;                      /*  40 */
  ULONG                     TlsBitmapBits[2];               /*  44 */
  PVOID                     ReadOnlySharedMemoryBase;       /*  4c */
  PVOID                     ReadOnlySharedMemoryHeap;       /*  50 */
  PVOID                    *ReadOnlyStaticServerData;       /*  54 */
  PVOID                     AnsiCodePageData;               /*  58 */
  PVOID                     OemCodePageData;                /*  5c */
  PVOID                     UnicodeCaseTableData;           /*  60 */
  ULONG                     NumberOfProcessors;             /*  64 */
  ULONG                     NtGlobalFlag;                   /*  68 */
  BYTE                      Spare2[4];                      /*  6c */
  LARGE_INTEGER             CriticalSectionTimeout;         /*  70 */
  ULONG                     HeapSegmentReserve;             /*  78 */
  ULONG                     HeapSegmentCommit;              /*  7c */
  ULONG                     HeapDeCommitTotalFreeThreshold; /*  80 */
  ULONG                     HeapDeCommitFreeBlockThreshold; /*  84 */
  ULONG                     NumberOfHeaps;                  /*  88 */
  ULONG                     MaximumNumberOfHeaps;           /*  8c */
  PVOID                    *ProcessHeaps;                   /*  90 */
  PVOID                     GdiSharedHandleTable;           /*  94 */
  PVOID                     ProcessStarterHelper;           /*  98 */
  PVOID                     GdiDCAttributeList;             /*  9c */
  PVOID                     LoaderLock;                     /*  a0 */
  ULONG                     OSMajorVersion;                 /*  a4 */
  ULONG                     OSMinorVersion;                 /*  a8 */
  ULONG                     OSBuildNumber;                  /*  ac */
  ULONG                     OSPlatformId;                   /*  b0 */
  ULONG                     ImageSubSystem;                 /*  b4 */
  ULONG                     ImageSubSystemMajorVersion;     /*  b8 */
  ULONG                     ImageSubSystemMinorVersion;     /*  bc */
  ULONG                     ImageProcessAffinityMask;       /*  c0 */
  ULONG                     GdiHandleBuffer[34];            /*  c4 */
  ULONG                     PostProcessInitRoutine;         /* 14c */
  PRTL_BITMAP               TlsExpansionBitmap;             /* 150 */
  ULONG                     TlsExpansionBitmapBits[32];     /* 154 */
  ULONG                     SessionId;                      /* 1d4 */
  ULARGE_INTEGER            AppCompatFlags;                 /* 1d8 */
  ULARGE_INTEGER            AppCompatFlagsUser;             /* 1e0 */
  PVOID                     ShimData;                       /* 1e8 */
  PVOID                     AppCompatInfo;                  /* 1ec */
  UNICODE_STRING            CSDVersion;                     /* 1f0 */
  PVOID                     ActivationContextData;          /* 1f8 */
  PVOID                     ProcessAssemblyStorageMap;      /* 1fc */
  PVOID                     SystemDefaultActivationData;    /* 200 */
  PVOID                     SystemAssemblyStorageMap;       /* 204 */
  ULONG                     MinimumStackCommit;             /* 208 */
  PVOID                    *FlsCallback;                    /* 20c */
  LIST_ENTRY                FlsListHead;                    /* 210 */
  PRTL_BITMAP               FlsBitmap;                      /* 218 */
  ULONG                     FlsBitmapBits[4];               /* 21c */
저작자 표시
Posted by 지영아빠

dlopen(3) - Linux man page


dladdr, dlclose, dlerror, dlopen, dlsym, dlvsym - programming interface to dynamic linking loader


#include <dlfcn.h>
void *dlopen(const char *filename, int flag);

char *dlerror(void);

void *dlsym(void *handle, const char *symbol);

int dlclose(void *handle);


The four functions dlopen(), dlsym(), dlclose(), dlerror() implement the interface to the dynamic linking loader.


The function dlerror() returns a human readable string describing the most recent error that occurred from dlopen(), dlsym() or dlclose() since the last call to dlerror(). It returns NULL if no errors have occurred since initialization or since it was last called.


The function dlopen() loads the dynamic library file named by the null-terminated stringfilename and returns an opaque "handle" for the dynamic library. If filename is NULL, then the returned handle is for the main program. If filename contains a slash ("/"), then it is interpreted as a (relative or absolute) pathname. Otherwise, the dynamic linker searches for the library as follows (see ld.so(8) for further details):
(ELF only) If the executable file for the calling program contains a DT_RPATH tag, and does not contain a DT_RUNPATH tag, then the directories listed in the DT_RPATH tag are searched.
If the environment variable LD_LIBRARY_PATH is defined to contain a colon-separated list of directories, then these are searched. (As a security measure this variable is ignored for set-user-ID and set-group-ID programs.)
(ELF only) If the executable file for the calling program contains a DT_RUNPATH tag, then the directories listed in that tag are searched.
The cache file /etc/ld.so.cache (maintained by ldconfig(8)) is checked to see whether it contains an entry for filename.
The directories /lib and /usr/lib are searched (in that order).

If the library has dependencies on other shared libraries, then these are also automatically loaded by the dynamic linker using the same rules. (This process may occur recursively, if those libraries in turn have dependencies, and so on.)

One of the following two values must be included in flag:

Perform lazy binding. Only resolve symbols as the code that references them is executed. If the symbol is never referenced, then it is never resolved. (Lazy binding is only performed for function references; references to variables are always immediately bound when the library is loaded.)
If this value is specified, or the environment variable LD_BIND_NOW is set to a non-empty string, all undefined symbols in the library are resolved before dlopen() returns. If this cannot be done, an error is returned.

Zero of more of the following values may also be ORed in flag:

The symbols defined by this library will be made available for symbol resolution of subsequently loaded libraries.
This is the converse of RTLD_GLOBAL, and the default if neither flag is specified. Symbols defined in this library are not made available to resolve references in subsequently loaded libraries.
RTLD_NODELETE (since glibc 2.2)
Do not unload the library during dlclose(). Consequently, the library's static variables are not reinitialised if the library is reloaded with dlopen() at a later time. This flag is not specified in POSIX.1-2001.
RTLD_NOLOAD (since glibc 2.2)
Don't load the library. This can be used to test if the library is already resident (dlopen() returns NULL if it is not, or the library's handle if it is resident). This flag can also be used to promote the flags on a library that is already loaded. For example, a library that was previously loaded with RTLD_LOCAL can be re-opened withRTLD_NOLOAD | RTLD_GLOBAL. This flag is not specified in POSIX.1-2001.
RTLD_DEEPBIND (since glibc 2.3.4)
Place the lookup scope of the symbols in this library ahead of the global scope. This means that a self-contained library will use its own symbols in preference to global symbols with the same name contained in libraries that have already been loaded. This flag is not specified in POSIX.1-2001.

If filename is a NULL pointer, then the returned handle is for the main program. When given to dlsym(), this handle causes a search for a symbol in the main program, followed by all shared libraries loaded at program startup, and then all shared libraries loaded by dlopen() with the flag RTLD_GLOBAL.

External references in the library are resolved using the libraries in that library's dependency list and any other libraries previously opened with the RTLD_GLOBAL flag. If the executable was linked with the flag "-rdynamic" (or, synonymously, "--export-dynamic"), then the global symbols in the executable will also be used to resolve references in a dynamically loaded library.

If the same library is loaded again with dlopen(), the same file handle is returned. The dl library maintains reference counts for library handles, so a dynamic library is not deallocated until dlclose() has been called on it as many times as dlopen() has succeeded on it. The _init routine, if present, is only called once. But a subsequent call withRTLD_NOW may force symbol resolution for a library earlier loaded with RTLD_LAZY.

If dlopen() fails for any reason, it returns NULL.


The function dlsym() takes a "handle" of a dynamic library returned by dlopen() and the null-terminated symbol name, returning the address where that symbol is loaded into memory. If the symbol is not found, in the specified library or any of the libraries that were automatically loaded by dlopen() when that library was loaded, dlsym() returns NULL. (The search performed by dlsym() is breadth first through the dependency tree of these libraries.) Since the value of the symbol could actually be NULL (so that a NULL return from dlsym() need not indicate an error), the correct way to test for an error is to call dlerror() to clear any old error conditions, then call dlsym(), and then call dlerror() again, saving its return value into a variable, and check whether this saved value is not NULL.

There are two special pseudo-handles, RTLD_DEFAULT and RTLD_NEXT. The former will find the first occurrence of the desired symbol using the default library search order. The latter will find the next occurrence of a function in the search order after the current library. This allows one to provide a wrapper around a function in another shared library.


The function dlclose() decrements the reference count on the dynamic library handle handle. If the reference count drops to zero and no other loaded libraries use symbols in it, then the dynamic library is unloaded.

The function dlclose() returns 0 on success, and non-zero on error.

The obsolete symbols _init and _fini

The linker recognizes special symbols _init and _fini. If a dynamic library exports a routine named _init, then that code is executed after the loading, before dlopen() returns. If the dynamic library exports a routine named _fini, then that routine is called just before the library is unloaded. In case you need to avoid linking against the system startup files, this can be done by giving gcc the "-nostartfiles" parameter on the command line.

Using these routines, or the gcc -nostartfiles or -nostdlib options, is not recommended. Their use may result in undesired behavior, since the constructor/destructor routines will not be executed (unless special measures are taken).

Instead, libraries should export routines using the __attribute__((constructor)) and __attribute__((destructor)) function attributes. See the gcc info pages for information on these. Constructor routines are executed before dlopen() returns, and destructor routines are executed before dlclose() returns.

GNU Extensions

Glibc adds two functions not described by POSIX, with prototypes
#define _GNU_SOURCE#include <dlfcn.h>
int dladdr(void *addr, Dl_info *info);
void *dlvsym(void *handle, char *symbol, char *version);
The function dladdr() takes a function pointer and tries to resolve name and file where it is located. Information is stored in the Dl_info structure:
typedef struct {
  const char *dli_fname;/* Filename of defining object */
  void *dli_fbase;      /* Load address of that object */
  const char *dli_sname;/* Name of nearest lower symbol */
  void *dli_saddr;      /* Exact value of nearest symbol */
} Dl_info;
dladdr() returns 0 on error, and non-zero on success.

The function dlvsym() does the same as dlsym() but takes a version string as an additional argument.


Load the math library, and print the cosine of 2.0:
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

int main(int argc, char **argv) {
    void *handle;
    double (*cosine)(double);
    char *error;
    handle = dlopen ("libm.so", RTLD_LAZY);
    if (!handle) {
        fprintf (stderr, "%s\n", dlerror());
    dlerror();    /* Clear any existing error */
    cosine = dlsym(handle, "cos");
    if ((error = dlerror()) != NULL)  {
        fprintf (stderr, "%s\n", error);
    printf ("%f\n", (*cosine)(2.0));
    return 0;

If this program were in a file named "foo.c", you would build the program with the following command:

gcc -rdynamic -o foo foo.c -ldl

Libraries exporting _init() and _fini() will want to be compiled as follows, using bar.c as the example name:

gcc -shared -nostartfiles -o bar bar.c


The symbols RTLD_DEFAULT and RTLD_NEXT are defined by <dlfcn.h> only when _GNU_SOURCE was defined before including it.

Since glibc 2.2.3, atexit(3) can be used to register an exit handler that is automatically called when a library is unloaded.


The dlopen interface standard comes from SunOS. That system also has dladdr(), but not dlvsym().

Conforming to

POSIX.1-2001 describes dlclose(), dlerror(), dlopen(), and dlsym().

See Also

ld(1)ldd(1)dl_iterate_phdr(3)ld.so(8)ldconfig(8), ld.so info pages, gcc info pages, ld info pages

Referenced By

backtrace_symbols_fd(3), lftp(1), lvm.conf(5), uselib(2)
저작자 표시
Posted by 지영아빠
현재 코드의 TEB를 얻는 방법은 winnt.h에 다음과 같은 functions을 이용합니다.

NtCurrentTeb()로 현재 Thread의  TEB 포인터를 넘겨줍니다.

//defined by 
static __inline__ struct _TEB * NtCurrentTeb(void)
    struct _TEB *ret;
    __asm__ __volatile__ (
        "mov{l} {%%fs:0x18,%0|%0,%%fs:0x18}\n"
        : "=r" (ret)
        : /* no inputs */
    return ret;
저작자 표시
Posted by 지영아빠
TEB(Thread Environment Block)

Windows의 스레드는 실행부 스레드 블록(ETHRED)에 정의된다. ETHREAD 블록과 여기에서 가리키는 구조체들은 시스템 주소 공간에 위치한다. 예외적으로 스레드환경블록(thread environment block,TEB)만은 프로세스 공간에 위치한다.

TEB에는 스레드ID, TLS정보, PEB포인터, GDI와 OpenGL정보 그리고 Ole를 위한 구조를 가지고 있다.

// Instead of using the Tls fields, use the Win32 TLS APIs
//     TlsAlloc, TlsGetValue, TlsSetValue, TlsFree
// Instead of using the ReservedForOle field, use the COM API
//     CoGetContextToken
typedef struct _TEB {
	union {
		struct {
			BYTE Reserved1[1952];
			PVOID Reserved2[412];
			PVOID TlsSlots[64];
			BYTE Reserved3[8];
			PVOID Reserved4[26];
			PVOID ReservedForOle;  // Windows 2000 only
			PVOID Reserved5[4];
			PVOID TlsExpansionSlots;
		struct {
			NT_TIB          Tib;                        /* 000 */
			PVOID           EnvironmentPointer;         /* 01c */
			CLIENT_ID       ClientId;                   /* 020 */
			PVOID           ActiveRpcHandle;            /* 028 */
			PVOID           ThreadLocalStoragePointer;  /* 02c */
			PPEB            Peb;                        /* 030 */
			ULONG           LastErrorValue;             /* 034 */
			ULONG           CountOfOwnedCriticalSections;/* 038 */
			PVOID           CsrClientThread;            /* 03c */
			PVOID           Win32ThreadInfo;            /* 040 */
			ULONG           Win32ClientInfo[31];        /* 044 used for user32 private data in Wine */
			PVOID           WOW32Reserved;              /* 0c0 */
			ULONG           CurrentLocale;              /* 0c4 */
			ULONG           FpSoftwareStatusRegister;   /* 0c8 */
			PVOID           SystemReserved1[54];        /* 0cc used for kernel32 private data in Wine */
			LONG            ExceptionCode;              /* 1a4 */
			ACTIVATION_CONTEXT_STACK ActivationContextStack; /* 1a8 */
			BYTE            SpareBytes1[24];            /* 1bc used for ntdll private data in Wine */
			PVOID           SystemReserved2[10];        /* 1d4 used for ntdll private data in Wine */
			GDI_TEB_BATCH   GdiTebBatch;                /* 1fc used for vm86 private data in Wine */
			ULONG           gdiRgn;                     /* 6dc */
			ULONG           gdiPen;                     /* 6e0 */
			ULONG           gdiBrush;                   /* 6e4 */
			CLIENT_ID       RealClientId;               /* 6e8 */
			HANDLE          GdiCachedProcessHandle;     /* 6f0 */
			ULONG           GdiClientPID;               /* 6f4 */
			ULONG           GdiClientTID;               /* 6f8 */
			PVOID           GdiThreadLocaleInfo;        /* 6fc */
			PVOID           UserReserved[5];            /* 700 */
			PVOID           glDispachTable[280];        /* 714 */
			ULONG           glReserved1[26];            /* b74 */
			PVOID           glReserved2;                /* bdc */
			PVOID           glSectionInfo;              /* be0 */
			PVOID           glSection;                  /* be4 */
			PVOID           glTable;                    /* be8 */
			PVOID           glCurrentRC;                /* bec */
			PVOID           glContext;                  /* bf0 */
			ULONG           LastStatusValue;            /* bf4 */
			UNICODE_STRING  StaticUnicodeString;        /* bf8 used by advapi32 */
			WCHAR           StaticUnicodeBuffer[261];   /* c00 used by advapi32 */
			PVOID           DeallocationStack;          /* e0c */
			PVOID           TlsSlots_[64];              /* e10 */
			LIST_ENTRY      TlsLinks;                   /* f10 */
			PVOID           Vdm;                        /* f18 */
			PVOID           ReservedForNtRpc;           /* f1c */
			PVOID           DbgSsReserved[2];           /* f20 */
			ULONG           HardErrorDisabled;          /* f28 */
			PVOID           Instrumentation[16];        /* f2c */
			PVOID           WinSockData;                /* f6c */
			ULONG           GdiBatchCount;              /* f70 */
			ULONG           Spare2;                     /* f74 */
			ULONG           Spare3;                     /* f78 */
			ULONG           Spare4;                     /* f7c */
			PVOID           ReservedForOle_;            /* f80 */
			ULONG           WaitingOnLoaderLock;        /* f84 */
			PVOID           Reserved5_[3];              /* f88 */
			PVOID          *TlsExpansionSlots_;         /* f94 */
			ULONG           ImpersonationLocale;        /* f98 */
			ULONG           IsImpersonating;            /* f9c */
			PVOID           NlsCache;                   /* fa0 */
			PVOID           ShimData;                   /* fa4 */
			ULONG           HeapVirtualAffinity;        /* fa8 */
			PVOID           CurrentTransactionHandle;   /* fac */
			PVOID           ActiveFrame;                /* fb0 */
			PVOID          *FlsSlots;                   /* fb4 */
                        struct _TEB    *self;
} TEB;
typedef TEB *PTEB;
저작자 표시
Posted by 지영아빠

티스토리 툴바