`
tianzhihehe
  • 浏览: 20447 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

高级C代码的汇编分析--截取struct部分

 
阅读更多

高级C代码的汇编分析--截取struct部分

 

1:

2:    typedef struct {

3:        int a;

4:        int b;

5:        int c;

6:    }mystruct;

7:

8:    int func(int a,int b)

9:    {

0040B800   push        ebp

0040B801   mov         ebp,esp

0040B803   sub         esp,1D8h

0040B809   push        ebx

0040B80A   push        esi

0040B80B   push        edi

0040B80C   lea         edi,[ebp-1D8h]

0040B812   mov         ecx,76h

0040B817   mov         eax,0CCCCCCCCh

0040B81C   rep stos    dword ptr [edi]

10:

11:       unsigned char *buf[100];

12:       mystruct *strs = (mystruct *)buf;

0040B81E   lea         eax,[ebp-190h]

0040B824   mov         dword ptr [ebp-194h],eax

13:       int i;

14:       for(i=0; i<5; i++)

0040B82A   mov         dword ptr [ebp-198h],0

0040B834   jmp         func+45h (0040b845)

0040B836   mov         ecx,dword ptr [ebp-198h]

0040B83C   add         ecx,1

0040B83F   mov         dword ptr [ebp-198h],ecx

0040B845   cmp         dword ptr [ebp-198h],5

0040B84C   jge         func+94h (0040b894)

15:       {

16:           strs[i].a=0;

0040B84E   mov         edx,dword ptr [ebp-198h]

0040B854   imul        edx,edx,0Ch

0040B857   mov         eax,dword ptr [ebp-194h]

0040B85D   mov         dword ptr [eax+edx],0

17:           strs[i].b=1;

0040B864   mov         ecx,dword ptr [ebp-198h]

0040B86A   imul        ecx,ecx,0Ch

0040B86D   mov         edx,dword ptr [ebp-194h]

0040B873   mov         dword ptr [edx+ecx+4],1

18:           strs[i].c=2;

0040B87B   mov         eax,dword ptr [ebp-198h]

0040B881   imul        eax,eax,0Ch

0040B884   mov         ecx,dword ptr [ebp-194h]

0040B88A   mov         dword ptr [ecx+eax+8],2

19:       }

0040B892   jmp         func+36h (0040b836)

20:

21:       return 0;

0040B894   xor         eax,eax

22:   }

0040B896   pop         edi

0040B897   pop         esi

0040B898   pop         ebx

0040B899   mov         esp,ebp

0040B89B   pop         ebp

0040B89C   ret

 

相关redis源代码:

 

typedef char *sds;

 

struct sdshdr {

    unsigned int len;

    unsigned int free;

    char buf[];

};

 

sds sdsnewlen(const void *init, size_t initlen) {

    struct sdshdr *sh;

 

    if (init) {

        sh = zmalloc(sizeof(struct sdshdr)+initlen+1);

    } else {

        sh = zcalloc(sizeof(struct sdshdr)+initlen+1);

    }

    if (sh == NULL) return NULL;

    sh->len = initlen;

    sh->free = 0;

    if (initlen && init)

        memcpy(sh->buf, init, initlen);

    sh->buf[initlen] = '\0';

    return (char*)sh->buf;

}

 

from http://www.cnblogs.com/lfsblack/p/3763993.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics