C ÓïÑÔÊý¾Ý¶ÔÆë
#include <stdio.h>
struct Foo1
{
char a;
int b;
char c;
int d;
};
#pragma pack (2)
struct Foo2
{
char a;
int b;
char c;
int d;
};
#pragma pack ()
struct Foo3
{
char a;
char c;
int b;
int d;
};
struct Foo4
{
char a;
int b;
char c;
int d;
} __attribute__ ((__packed__));
int main(int argc, char **argv)
{
printf("size of Foo1: %d ", sizeof(struct Foo1));
printf("size of Foo2: %d ", sizeof(struct Foo2));
printf("size of Foo3: %d ", sizeof(struct Foo3));
printf("size of Foo4: %d ", sizeof(struct Foo4));
return 0;
}
ÏÂÃæµÄС³ÌÐòÊǹØÓÚÊý¾Ý¶ÔÆëµÄÒ»¸öÊÔÑ飬ÔÚÎÒµÄ 2.4 ÄÚºËµÄ Linux ÉÏÔËÐнá¹ûÈçÏ£º
size of Foo1: 16
size of Foo2: 12
size of Foo3: 12
size of Foo4: 10
1¡¢ Foo1 δ¾¹ýÈκδ¦ÀíµÄ£¬ÓÉÓÚÕûÐÍÐèÒª°´ 4 ×Ö½Ú¶ÔÆë£¬Òò´Ëʵ¼Ê´æ´¢½á¹ûÈçÏ£¬Õ¼Óà 16 ¸ö×Ö½Ú¿Õ¼ä
2¡¢Foo2 ͨ¹ý #pragma pack (2) £¬½«¶ÔÆë·½Ê½¸ÄΪ 2 ×Ö½Ú¶ÔÆë£¬Êµ¼Ê´æ´¢½á¹ûÈçÏ£¬Õ¼Óà 12 ×Ö½Ú¿Õ¼ä
3¡¢ Foo3, ͨ¹ý #pragma pack ()£¬ÓÖ»Ö¸´µ½Ä¬È쵀 4 ×Ö½Ú¶ÔÆë·½Ê½£¬µ«ÊÇÓÉÓÚµ÷ÕûÁ˱äÁ¿µÄ˳Ðò£¬Êµ¼Ê´æ´¢½á¹ûÈçÏ£¬Õ¼Óà 12 ×Ö½Ú¿Õ¼ä
4¡¢Foo4, ͨ¹ý GCC µÄ __packed__ µÄÀ©Õ¹ÊôÐÔ£¬½ûÖ¹¶ÔÆë£¬µÃµ½ÈçϽá¹û£¬Õ¼Óÿռä 10 ×Ö½Ú
Ïà¹ØÎĵµ£º
CreateThreadº¯Êý
Ç°Ãæ½²¹ý£¬½ø³ÌµÄÖ÷Ï̻߳áÔÚCreateProcessµ÷ÓÃʱ×Ô¶¯´´½¨¡£¼ÙÈçÄãÒªÊÖ¹¤´´½¨Ị̈߳¬Äã¿ÉÒÔµ÷ÓÃCreateThreadº¯Êý£º
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD cbStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreateFlags,
PDWORD pdwThreadID) ......
N µ±ÓÃÁ½¸ö²¹Âë±íʾµÄ´ø·ûºÅÊý½øÐÐÔËËãʱ£¬N=1±íʾÔËËãµÄ½á¹ûΪ¸ºÊý£»N=0±íʾÔËËãµÄ½á¹ûΪÕýÊý»òÁã.
Z Z=1±íʾÔËËãµÄ½á¹ûΪÁ㣬Z=0±íʾÔËËãµÄ½á¹û·ÇÁã¡£
C ¿ÉÒÔÓÐ4ÖÖ·½·¨ÉèÖÃCµÄÖµ£º
¼Ó·¨ÔËË㣨°üÀ¨CMN£©£ºµ±ÔËËã½á¹û²úÉúÁ˽øÎ»Ê±£¨ÎÞ·ûºÅÊýÒç³ö£©£¬C=1£¬·ñÔòC=0¡£
¼õ·¨ÔËË㣨°üÀ¨CMP£©£ºµ±ÔËËãʱ²úÉúÁ˽èλʱ£¨ÎÞ·ûºÅÊ ......
@ ECHO OFF
@ ECHO.
@ ECHO. ˵ Ã÷
@ ECHO ----------------------------------------------------------------- ......
ÔÚC/C++ÖУ¬ÄÚ´æÖÐÊý¾Ý´æ´¢·Ö³É4¸öÇø£¬·Ö±ðÊǶѡ¢Õ»¡¢È«¾Ö/¾²Ì¬´æ´¢ÇøºÍ³£Á¿´æ´¢Çø¡£
Õ»(stack)£¬¾ÍÊÇÄÇЩÓɱàÒëÆ÷ÔÚÐèÒªµÄʱºò·ÖÅ䣬ÔÚ²»ÐèÒªµÄʱºò×Ô¶¯Çå³ýµÄ±äÁ¿µÄ´æ´¢Çø¡£ÀïÃæµÄ±äÁ¿Í¨³£ÊǾֲ¿±äÁ¿¡¢º¯Êý²ÎÊýµÈ¡£
¶Ñ(heap)£¬Ò»°ãÓ ......
Ò»£¬²»Í¬¹Ø¼ü×Ö£¬ÏµÍ³Ñ¹Õ»·½Ê½
1£¬Èç¹ûº¯ÊýfuncÊÇ__cdecl(VCϵÄĬÈϵ÷Ó÷½Ê½)£¬µ÷ÓÃʱÇé¿öÈçÏÂ
int main()
{
//²ÎÊý´ÓÓÒµ½×óѹջ
push 4
push 3
push 2
push 1
call func
add esp 0x10 //µ÷ÓÃÕ߻ָ´¶ÑÕ»Ö¸Õëesp£¬4¸ö²ÎÊýµÄ´óСÊÇ0x10(4x4)
}
Cµ÷ÓÃÔ¼¶¨£¨¼´ÓÃ__cdecl¹Ø¼ü×Ö˵Ã÷£©°´´ÓÓÒÖÁ×óµÄ˳Ðòѹ² ......