|
| Scrap/64ºñÆ®À©µµ¿ìÇÁ·Î±×·¡¹Ö¨é64ºñÆ®ÇÁ·Î±×·¥À¸·Î°¡´Â±æ |
UserPreferences |
| serious-code.net | RecentChanges | ±â¼úÀÚ·á | ¸µÅ© | TitleIndex | ºí·Î±× |
%LIB% : ¶óÀ̺귯¸®°¡ À§Ä¡ÇÑ µð·ºÅ丮 %INCLUDE% : Çì´õ ÆÄÀÏÀÌ À§Ä¡ÇÑ µð·ºÅ丮 %PATH% : ÄÄÆÄÀÏ·¯, ¸µÄ¿, ¸ÞÀÌÄ¿, ¿©·¯ °¡Áö SDK µµ±¸µéÀÌ À§Ä¡ÇÑ µð·ºÅ丮
cl /c /EHsc /Wp64 64test.cpp
link /out:64test.exe /machine:IA64 64test.obj
devenv /useenv
<Æ÷ÀÎÅ͸¦ À߸ø ŸÀÔij½ºÆÃ ÇÑ ¿¹> imageBase = (PVOID)((ULONG)ImageBase|1); <Æ÷ÀÎÅ͸¦ Á¤»óÀûÀ¸·Î ŸÀÔij½ºÆÃ ÇÑ ¿¹> imageBase = (PVOID)((ULONG_PTR)ImageBase|1);Âü°í·Î HANDLEµµ void*·Î Á¤ÀǵǾî Àֱ⠶§¹®¿¡ HANDLEµµ Æ÷ÀÎÅÍ¿Í ¸¶Âù°¡Áö·Î Ãë±ÞÇØ¾ß ÇÑ´Ù.
void func( OUT PULONG *PointerToUlong );ÀÌ ÇÔ¼ö¸¦ ´ÙÀ½ÀÇ ¿¹¿Í °°ÀÌ È£ÃâÇØ¼´Â ¾È µÈ´Ù. &ulÀ» PULONG*À¸·Î ŸÀÔij½ºÆÃÀ» Ç߱⠶§¹®¿¡ ÄÄÆÄÀÏ·¯ ¿À·ù´Â ¹ß»ýÇÏÁö ¾ÊÁö¸¸ ÇÔ¼ö¿¡¼´Â &ul¿¡ 64ºñÆ® Æ÷ÀÎÅÍ °ªÀ» ¾²°Ô µÈ´Ù. ÀÌ ÄÚµå´Â 32ºñÆ® À©µµ¿ì¿¡¼´Â Á¤»óÀûÀ¸·Î µ¿ÀÛÇϰÚÁö¸¸ 64ºñÆ® À©µµ¿ì¿¡¼´Â Æ÷ÀÎÅÍ µ¥ÀÌÅÍÀÇ ¼Õ½ÇÀÌ ¹ß»ýÇÏ°Ô µÈ´Ù.
ULONG ul; PULONG lp; func((PULONG *)&ul); lp = (PULONG)ul;´ë½Å¿¡ ´ÙÀ½°ú °°ÀÌ È£ÃâÇØ¾ß ÇÑ´Ù.
PULONG lp; func(&lp);
GWLP_WNDPROC/GWLP_HINSTANCE/GWLP_HWNDPARENT/ GWLP_USERDATA/GWLP_ID°¡ Á¤ÀǵǾî ÀÖ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº ÄÚµå´Â 64ºñÆ® À©µµ¿ì¿¡¼´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.
SetWindowLong(hWnd, GWL_WNDPROC, (LONG)MyWndProc);ÀÌ ¿¹¸¦ 64ºñÆ® À©µµ¿ì¿¡¼ µ¿ÀÛÇϵµ·Ï ¼öÁ¤ÇÏ¸é ´ÙÀ½°ú °°´Ù.
SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)MyWndProc);À̹ۿ¡µµ WNDCLASS ±¸Á¶Ã¼ÀÇ cbWindExtra ¸â¹ö¸¦ Ãß°¡ÀûÀÎ °ªÀ» ÀúÀåÇϱâ À§ÇØ »ç¿ëÇÏ·Á°í ÇÒ ¶§ ±âÁ¸¿¡´Â sizeof(DWORD) Å©±â¸¸Å¸¸ ÇÒ´çÇØµµ µÇ¾úÁö¸¸ 64ºñÆ® À©µµ¿ì¿¡¼´Â sizeof(DWORD_PTR)¸¸ÅÀ» ÇÒ´çÇØ »ç¿ëÇØ¾ß ÇÑ´Ù.
#ifdef _WIN32 // Win32 code ... #else // Win16 code ... #endif
TYPE_ALIGNMENT( DWORD_PTR ) == x86¿¡¼´Â4, {{{IA64/x64}}}¿¡¼´Â 8
TYPE_ALIGNMENT( UCHAR ) == Ç÷§Æû¿¡ »ó°ü¾øÀÌ 1
µ¥ÀÌÅÍ Á¤·ÄÀº »ó´çÈ÷ Áß¿äÇѵ¥ 32ºñÆ® À©µµ¿ì¿¡¼´Â Ä¿³Î ¸ðµå¿Í »ç¿ëÀÚ ¸ðµå ¸ðµÎ¿¡¼ µ¥ÀÌÅÍ Á¤·ÄÀÌ µÇ¾î ÀÖÁö ¾Ê¾Æµµ ½Ã½ºÅÛÀÌ ÀÚµ¿À¸·Î ó¸®ÇßÁö¸¸ 64ºñÆ® À©µµ¿ì¿¡¼´Â Ä¿³Î ¸ðµåÀÇ °æ¿ì ÀÚµ¿À¸·Î µ¥ÀÌÅÍ Á¤·Ä ¿¹¿Ü¸¦ ó¸®ÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ±×·¡¼ ¹Ýµå½Ã µ¥ÀÌÅÍ Á¤·ÄÀ» ¸ÂÃß¾î Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. UINT_PTR a; ULONG b; a = a & ~(b - 1);ÀÌ ÄÚµåÀÇ ¹®Á¦´Â ~(b?1) ¿¬»êÀÌ »ý¼ºÇÏ´Â °á°ú°¡ 0xFFFF FFFF xxxx xxxx.ÀÌ ¾Æ´Ñ 0x0000 0000 xxxx xxxx À̶ó´Âµ¥ ÀÖ´Ù. ±×·¡¼ ´ÙÀ½°ú °°ÀÌ Äڵ带 ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
a = a & ~((UINT_PTR)b - 1);
ULONG x; LONG y; LONG *pVar1; LONG *pVar2; pVar2 = pVar1 + y * (x - 1);x°¡ unsignedÀ̱⠶§¹®¿¡ ¹®Á¦°¡ ¹ß»ýÇϴµ¥ x·Î ÀÎÇØ Àüü ¼ö½ÄÀÌ unsigned·Î ¹Ù²î±â ¶§¹®ÀÌ´Ù. ÀÌ ¼ö½Ä¿¡¼ y°¡ À½¼ö¸¸ ¾Æ´Ï¶ó¸é Á¤»óÀûÀ¸·Î µ¿ÀÛÇÒ ¼öµµ ÀÖ´Ù. ¸¸ÀÏ y°¡ À½¼ö¶ó¸é ¼ö½Ä¿¡¼ y´Â unsigned °ªÀ¸·Î º¯°æµÇ°í 32ºñÆ® Á¤¹Ðµµ·Î pvar1°ú °ö¼À°ú µ¡¼ÀÀ» ¼öÇàÇÏ°Ô µÇ°í 32ºñÆ® unsigned À½¼ö °ªÀº 64ºñÆ® ¾ç¼ö °ªÀ¸·Î º¯°æµÇ°Ô µÇ¾î¼ ºñÁ¤»óÀûÀÎ °á°ú°¡ »ý¼ºµÈ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é x¸¦ signed °ªÀ¸·Î ¼±¾ðÇϰųª ¼ö½Ä ³»¿¡¼ ¸í½ÃÀûÀ¸·Î LONGÀ¸·Î ŸÀÔij½ºÆÃÇØ¾ß ÇÑ´Ù.
struct xx {
DWORD NumberOfPointers;
PVOID Pointers[1];
};
´ÙÀ½ ÄÚµå´Â À߸øµÈ ÄÚµåÀε¥ ÄÄÆÄÀÏ·¯´Â 8¹ÙÀÌÆ® Á¤·ÄÀ» ¸ÂÃß±â À§ÇØ 4¹ÙÀÌÆ®¸¦ Ãß°¡ÀûÀ¸·Î ÆÐµùÇØ¼ ÇÒ´çÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. malloc(sizeof(DWORD)+100*sizeof(PVOID));ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¸é µÈ´Ù.
malloc(offsetof(struct xx, Pointers) +100*sizeof(PVOID));