Linux-C strlen()与sizeof
Linux-C strlen()与sizeof一、简述 strlen()函数一般用来获取字符串的长度,不包括'\0';sizeof 操作符用来获取类型占用的字节数或常量占用的字节数,包括'\0'。 其实strlen()函数可以看为:传递一个地址进去,一个一个字节解析,不是'\0'就长度加1,遇到'\0'就结束。二、strlen()函数 所需头文件为:stri...
Linux-C strlen()与sizeof
一、简述
strlen()函数一般用来获取字符串的长度,不包括'\0';sizeof 操作符用来获取类型占用的字节数或常量占用的字节数,包括'\0'。
其实strlen()函数可以看为:传递一个地址进去,一个一个字节解析,不是'\0'就长度加1,遇到'\0'就结束。
二、strlen()函数
所需头文件为:string.h
示例代码:
#include <stdio.h>
#include <string.h>
int main(int argc,char* argv[])
{
char* p_ch = "hello";
char ch_arr[] = "hello";
printf("p:%d \n",strlen(p_ch));
printf("ch_arr:%d \n",strlen(ch_arr));//但是数组的长度是6,包含了'\0'
printf("hello:%d \n",strlen("hello"));
return 0;
}
代码结果:
自己尝试简单写strlen()函数
#include <stdio.h>
int strlen(const char * str);//函数声明
int main(int argc,char* argv[])
{
char* p_ch = "hello";
char ch_arr[] = "hello";
printf("p:%d \n",strlen(p_ch));
printf("ch_arr:%d \n",strlen(ch_arr));
printf("hello:%d \n",strlen("hello"));
return 0;
}
int strlen(const char * str)//const限定函数内部不能改变str
{
int length = 0;
while(str[length++]!='\n');
return length;
}
代码结果:
三、sizeof操作符:虽然"长"得像函数,但是它是操作符;在不引起歧义时它可以不用括号。
示例代码:
#include <stdio.h>
int main(int argc,char* argv[])
{
char ch = 'a';
int num = 10;
float fl= 1.23f;
double db = 4.567;
char* p_ch = "hello";
char ch_arr[] = "hello";
printf("10:%d \n",sizeof(10));
printf("1.23f:%d \n",sizeof(1.23f));
printf("4.567:%d \n\n",sizeof(4.567));
printf("a:%d \n",sizeof(ch));
printf("num:%d \n",sizeof(num));
printf("fl:%d \n",sizeof(fl));
printf("db:%d \n\n",sizeof(db));
printf("char:%d \n",sizeof(char));
printf("int:%d \n",sizeof(int));
printf("float:%d \n",sizeof(float));
printf("double:%d \n\n",sizeof(double));
printf("ch:%d \n",sizeof ch);
printf("num:%d \n",sizeof num);
printf("fl:%d \n",sizeof fl);
printf("db:%d \n\n",sizeof db);
printf("p_ch:%d \n",sizeof(p_ch));
printf("ch_arr:%d \n",sizeof(ch_arr));
printf("hello:%d \n",sizeof("hello"));
return 0;
}
代码结果:
注:指针变量占用字节一般由系统(CPU寻址范围)决定,在32位系统中一般是4字节。
sizeof操作符是编译阶段就完成计算的的,即还没有运行程序就完成了,或者是说用结果4代替sizeof(int),更不会向函数那样运行到才执行。
对sizeof.c文件只进行编译但比执行:执行gcc sizeof.c -o sizeof 生成sizeof可执行文件;
使用命令objdump -S sizeof 来查看sizeof文件。
Disassembly of section .init:
080482f8 <_init>:
80482f8: 53 push %ebx
80482f9: 83 ec 08 sub $0x8,%esp
80482fc: e8 00 00 00 00 call 8048301 <_init+0x9>
8048301: 5b pop %ebx
8048302: 81 c3 f3 1c 00 00 add $0x1cf3,%ebx
8048308: 8b 83 fc ff ff ff mov -0x4(%ebx),%eax
804830e: 85 c0 test %eax,%eax
8048310: 74 05 je 8048317 <_init+0x1f>
8048312: e8 49 00 00 00 call 8048360 <__gmon_start__@plt>
8048317: e8 f4 00 00 00 call 8048410 <frame_dummy>
804831c: e8 7f 03 00 00 call 80486a0 <__do_global_ctors_aux>
8048321: 83 c4 08 add $0x8,%esp
8048324: 5b pop %ebx
8048325: c3 ret
Disassembly of section .plt:
08048330 <printf@plt-0x10>:
8048330: ff 35 f8 9f 04 08 pushl 0x8049ff8
8048336: ff 25 fc 9f 04 08 jmp *0x8049ffc
804833c: 00 00 add %al,(%eax)
...
08048340 <printf@plt>:
8048340: ff 25 00 a0 04 08 jmp *0x804a000
8048346: 68 00 00 00 00 push $0x0
804834b: e9 e0 ff ff ff jmp 8048330 <_init+0x38>
08048350 <__stack_chk_fail@plt>:
8048350: ff 25 04 a0 04 08 jmp *0x804a004
8048356: 68 08 00 00 00 push $0x8
804835b: e9 d0 ff ff ff jmp 8048330 <_init+0x38>
08048360 <__gmon_start__@plt>:
8048360: ff 25 08 a0 04 08 jmp *0x804a008
8048366: 68 10 00 00 00 push $0x10
804836b: e9 c0 ff ff ff jmp 8048330 <_init+0x38>
08048370 <__libc_start_main@plt>:
8048370: ff 25 0c a0 04 08 jmp *0x804a00c
8048376: 68 18 00 00 00 push $0x18
804837b: e9 b0 ff ff ff jmp 8048330 <_init+0x38>
Disassembly of section .text:
08048380 <_start>:
8048380: 31 ed xor %ebp,%ebp
8048382: 5e pop %esi
8048383: 89 e1 mov %esp,%ecx
8048385: 83 e4 f0 and $0xfffffff0,%esp
8048388: 50 push %eax
8048389: 54 push %esp
804838a: 52 push %edx
804838b: 68 90 86 04 08 push $0x8048690
8048390: 68 20 86 04 08 push $0x8048620
8048395: 51 push %ecx
8048396: 56 push %esi
8048397: 68 34 84 04 08 push $0x8048434
804839c: e8 cf ff ff ff call 8048370 <__libc_start_main@plt>
80483a1: f4 hlt
80483a2: 90 nop
80483a3: 90 nop
80483a4: 90 nop
80483a5: 90 nop
80483a6: 90 nop
80483a7: 90 nop
80483a8: 90 nop
80483a9: 90 nop
80483aa: 90 nop
80483ab: 90 nop
80483ac: 90 nop
80483ad: 90 nop
80483ae: 90 nop
80483af: 90 nop
080483b0 <__do_global_dtors_aux>:
80483b0: 55 push %ebp
80483b1: 89 e5 mov %esp,%ebp
80483b3: 53 push %ebx
80483b4: 83 ec 04 sub $0x4,%esp
80483b7: 80 3d 18 a0 04 08 00 cmpb $0x0,0x804a018
80483be: 75 3f jne 80483ff <__do_global_dtors_aux+0x4f>
80483c0: a1 1c a0 04 08 mov 0x804a01c,%eax
80483c5: bb 20 9f 04 08 mov $0x8049f20,%ebx
80483ca: 81 eb 1c 9f 04 08 sub $0x8049f1c,%ebx
80483d0: c1 fb 02 sar $0x2,%ebx
80483d3: 83 eb 01 sub $0x1,%ebx
80483d6: 39 d8 cmp %ebx,%eax
80483d8: 73 1e jae 80483f8 <__do_global_dtors_aux+0x48>
80483da: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
80483e0: 83 c0 01 add $0x1,%eax
80483e3: a3 1c a0 04 08 mov %eax,0x804a01c
80483e8: ff 14 85 1c 9f 04 08 call *0x8049f1c(,%eax,4)
80483ef: a1 1c a0 04 08 mov 0x804a01c,%eax
80483f4: 39 d8 cmp %ebx,%eax
80483f6: 72 e8 jb 80483e0 <__do_global_dtors_aux+0x30>
80483f8: c6 05 18 a0 04 08 01 movb $0x1,0x804a018
80483ff: 83 c4 04 add $0x4,%esp
8048402: 5b pop %ebx
8048403: 5d pop %ebp
8048404: c3 ret
8048405: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
8048409: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi
08048410 <frame_dummy>:
8048410: 55 push %ebp
8048411: 89 e5 mov %esp,%ebp
8048413: 83 ec 18 sub $0x18,%esp
8048416: a1 24 9f 04 08 mov 0x8049f24,%eax
804841b: 85 c0 test %eax,%eax
804841d: 74 12 je 8048431 <frame_dummy+0x21>
804841f: b8 00 00 00 00 mov $0x0,%eax
8048424: 85 c0 test %eax,%eax
8048426: 74 09 je 8048431 <frame_dummy+0x21>
8048428: c7 04 24 24 9f 04 08 movl $0x8049f24,(%esp)
804842f: ff d0 call *%eax
8048431: c9 leave
8048432: c3 ret
8048433: 90 nop
08048434 <main>:
8048434: 55 push %ebp
8048435: 89 e5 mov %esp,%ebp
8048437: 83 e4 f0 and $0xfffffff0,%esp
804843a: 83 ec 40 sub $0x40,%esp
804843d: 8b 45 0c mov 0xc(%ebp),%eax
8048440: 89 44 24 1c mov %eax,0x1c(%esp)
8048444: 65 a1 14 00 00 00 mov %gs:0x14,%eax
804844a: 89 44 24 3c mov %eax,0x3c(%esp)
804844e: 31 c0 xor %eax,%eax
8048450: c6 44 24 35 61 movb $0x61,0x35(%esp)
8048455: c7 44 24 28 0a 00 00 movl $0xa,0x28(%esp)
804845c: 00
804845d: b8 a4 70 9d 3f mov $0x3f9d70a4,%eax
8048462: 89 44 24 2c mov %eax,0x2c(%esp)
8048466: dd 05 90 87 04 08 fldl 0x8048790
804846c: dd 5c 24 20 fstpl 0x20(%esp)
8048470: c7 44 24 30 f0 86 04 movl $0x80486f0,0x30(%esp)
8048477: 08
8048478: c7 44 24 36 68 65 6c movl $0x6c6c6568,0x36(%esp)
804847f: 6c
8048480: 66 c7 44 24 3a 6f 00 movw $0x6f,0x3a(%esp)
8048487: b8 f6 86 04 08 mov $0x80486f6,%eax
804848c: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
8048493: 00
8048494: 89 04 24 mov %eax,(%esp)
8048497: e8 a4 fe ff ff call 8048340 <printf@plt>
804849c: b8 fe 86 04 08 mov $0x80486fe,%eax
80484a1: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80484a8: 00
80484a9: 89 04 24 mov %eax,(%esp)
80484ac: e8 8f fe ff ff call 8048340 <printf@plt>
80484b1: b8 09 87 04 08 mov $0x8048709,%eax
80484b6: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
80484bd: 00
80484be: 89 04 24 mov %eax,(%esp)
80484c1: e8 7a fe ff ff call 8048340 <printf@plt>
80484c6: b8 15 87 04 08 mov $0x8048715,%eax
80484cb: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp)
80484d2: 00
80484d3: 89 04 24 mov %eax,(%esp)
80484d6: e8 65 fe ff ff call 8048340 <printf@plt>
80484db: b8 1c 87 04 08 mov $0x804871c,%eax
80484e0: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80484e7: 00
80484e8: 89 04 24 mov %eax,(%esp)
80484eb: e8 50 fe ff ff call 8048340 <printf@plt>
80484f0: b8 25 87 04 08 mov $0x8048725,%eax
80484f5: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80484fc: 00
80484fd: 89 04 24 mov %eax,(%esp)
8048500: e8 3b fe ff ff call 8048340 <printf@plt>
8048505: b8 2d 87 04 08 mov $0x804872d,%eax
804850a: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
8048511: 00
8048512: 89 04 24 mov %eax,(%esp)
8048515: e8 26 fe ff ff call 8048340 <printf@plt>
804851a: b8 36 87 04 08 mov $0x8048736,%eax
804851f: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp)
8048526: 00
8048527: 89 04 24 mov %eax,(%esp)
804852a: e8 11 fe ff ff call 8048340 <printf@plt>
804852f: b8 40 87 04 08 mov $0x8048740,%eax
8048534: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
804853b: 00
804853c: 89 04 24 mov %eax,(%esp)
804853f: e8 fc fd ff ff call 8048340 <printf@plt>
8048544: b8 49 87 04 08 mov $0x8048749,%eax
8048549: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
8048550: 00
8048551: 89 04 24 mov %eax,(%esp)
8048554: e8 e7 fd ff ff call 8048340 <printf@plt>
8048559: b8 54 87 04 08 mov $0x8048754,%eax
804855e: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
8048565: 00
8048566: 89 04 24 mov %eax,(%esp)
8048569: e8 d2 fd ff ff call 8048340 <printf@plt>
804856e: b8 61 87 04 08 mov $0x8048761,%eax
8048573: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp)
804857a: 00
804857b: 89 04 24 mov %eax,(%esp)
804857e: e8 bd fd ff ff call 8048340 <printf@plt>
8048583: b8 1c 87 04 08 mov $0x804871c,%eax
8048588: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
804858f: 00
8048590: 89 04 24 mov %eax,(%esp)
8048593: e8 a8 fd ff ff call 8048340 <printf@plt>
8048598: b8 25 87 04 08 mov $0x8048725,%eax
804859d: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80485a4: 00
80485a5: 89 04 24 mov %eax,(%esp)
80485a8: e8 93 fd ff ff call 8048340 <printf@plt>
80485ad: b8 2d 87 04 08 mov $0x804872d,%eax
80485b2: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
80485b9: 00
80485ba: 89 04 24 mov %eax,(%esp)
80485bd: e8 7e fd ff ff call 8048340 <printf@plt>
80485c2: b8 69 87 04 08 mov $0x8048769,%eax
80485c7: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80485ce: 00
80485cf: 89 04 24 mov %eax,(%esp)
80485d2: e8 69 fd ff ff call 8048340 <printf@plt>
80485d7: b8 73 87 04 08 mov $0x8048773,%eax
80485dc: c7 44 24 04 06 00 00 movl $0x6,0x4(%esp)
80485e3: 00
80485e4: 89 04 24 mov %eax,(%esp)
80485e7: e8 54 fd ff ff call 8048340 <printf@plt>
80485ec: b8 7f 87 04 08 mov $0x804877f,%eax
80485f1: c7 44 24 04 06 00 00 movl $0x6,0x4(%esp)
80485f8: 00
80485f9: 89 04 24 mov %eax,(%esp)
80485fc: e8 3f fd ff ff call 8048340 <printf@plt>
8048601: b8 00 00 00 00 mov $0x0,%eax
8048606: 8b 54 24 3c mov 0x3c(%esp),%edx
804860a: 65 33 15 14 00 00 00 xor %gs:0x14,%edx
8048611: 74 05 je 8048618 <main+0x1e4>
8048613: e8 38 fd ff ff call 8048350 <__stack_chk_fail@plt>
8048618: c9 leave
8048619: c3 ret
804861a: 90 nop
804861b: 90 nop
804861c: 90 nop
804861d: 90 nop
804861e: 90 nop
804861f: 90 nop
08048620 <__libc_csu_init>:
8048620: 55 push %ebp
8048621: 57 push %edi
8048622: 56 push %esi
8048623: 53 push %ebx
8048624: e8 69 00 00 00 call 8048692 <__i686.get_pc_thunk.bx>
8048629: 81 c3 cb 19 00 00 add $0x19cb,%ebx
804862f: 83 ec 1c sub $0x1c,%esp
8048632: 8b 6c 24 30 mov 0x30(%esp),%ebp
8048636: 8d bb 20 ff ff ff lea -0xe0(%ebx),%edi
804863c: e8 b7 fc ff ff call 80482f8 <_init>
8048641: 8d 83 20 ff ff ff lea -0xe0(%ebx),%eax
8048647: 29 c7 sub %eax,%edi
8048649: c1 ff 02 sar $0x2,%edi
804864c: 85 ff test %edi,%edi
804864e: 74 29 je 8048679 <__libc_csu_init+0x59>
8048650: 31 f6 xor %esi,%esi
8048652: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
8048658: 8b 44 24 38 mov 0x38(%esp),%eax
804865c: 89 2c 24 mov %ebp,(%esp)
804865f: 89 44 24 08 mov %eax,0x8(%esp)
8048663: 8b 44 24 34 mov 0x34(%esp),%eax
8048667: 89 44 24 04 mov %eax,0x4(%esp)
804866b: ff 94 b3 20 ff ff ff call *-0xe0(%ebx,%esi,4)
8048672: 83 c6 01 add $0x1,%esi
8048675: 39 fe cmp %edi,%esi
8048677: 75 df jne 8048658 <__libc_csu_init+0x38>
8048679: 83 c4 1c add $0x1c,%esp
804867c: 5b pop %ebx
804867d: 5e pop %esi
804867e: 5f pop %edi
804867f: 5d pop %ebp
8048680: c3 ret
8048681: eb 0d jmp 8048690 <__libc_csu_fini>
8048683: 90 nop
8048684: 90 nop
8048685: 90 nop
8048686: 90 nop
8048687: 90 nop
8048688: 90 nop
8048689: 90 nop
804868a: 90 nop
804868b: 90 nop
804868c: 90 nop
804868d: 90 nop
804868e: 90 nop
804868f: 90 nop
08048690 <__libc_csu_fini>:
8048690: f3 c3 repz ret
08048692 <__i686.get_pc_thunk.bx>:
8048692: 8b 1c 24 mov (%esp),%ebx
8048695: c3 ret
8048696: 90 nop
8048697: 90 nop
8048698: 90 nop
8048699: 90 nop
804869a: 90 nop
804869b: 90 nop
804869c: 90 nop
804869d: 90 nop
804869e: 90 nop
804869f: 90 nop
080486a0 <__do_global_ctors_aux>:
80486a0: 55 push %ebp
80486a1: 89 e5 mov %esp,%ebp
80486a3: 53 push %ebx
80486a4: 83 ec 04 sub $0x4,%esp
80486a7: a1 14 9f 04 08 mov 0x8049f14,%eax
80486ac: 83 f8 ff cmp $0xffffffff,%eax
80486af: 74 13 je 80486c4 <__do_global_ctors_aux+0x24>
80486b1: bb 14 9f 04 08 mov $0x8049f14,%ebx
80486b6: 66 90 xchg %ax,%ax
80486b8: 83 eb 04 sub $0x4,%ebx
80486bb: ff d0 call *%eax
80486bd: 8b 03 mov (%ebx),%eax
80486bf: 83 f8 ff cmp $0xffffffff,%eax
80486c2: 75 f4 jne 80486b8 <__do_global_ctors_aux+0x18>
80486c4: 83 c4 04 add $0x4,%esp
80486c7: 5b pop %ebx
80486c8: 5d pop %ebp
80486c9: c3 ret
80486ca: 90 nop
80486cb: 90 nop
Disassembly of section .fini:
080486cc <_fini>:
80486cc: 53 push %ebx
80486cd: 83 ec 08 sub $0x8,%esp
80486d0: e8 00 00 00 00 call 80486d5 <_fini+0x9>
80486d5: 5b pop %ebx
80486d6: 81 c3 1f 19 00 00 add $0x191f,%ebx
80486dc: e8 cf fc ff ff call 80483b0 <__do_global_dtors_aux>
80486e1: 83 c4 08 add $0x8,%esp
80486e4: 5b pop %ebx
80486e5: c3 ret
$0x4,0x4(%esp)
8048493: 00
8048494: 89 04 24 mov %eax,(%esp)
8048497: e8 a4 fe ff ff call 8048340 <printf@plt>
804849c: b8 fe 86 04 08 mov $0x80486fe,%eax
80484a1: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80484a8: 00
80484a9: 89 04 24 mov %eax,(%esp)
80484ac: e8 8f fe ff ff call 8048340 <printf@plt>
80484b1: b8 09 87 04 08 mov $0x8048709,%eax
80484b6: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
80484bd: 00
80484be: 89 04 24 mov %eax,(%esp)
80484c1: e8 7a fe ff ff call 8048340 <printf@plt>
80484c6: b8 15 87 04 08 mov $0x8048715,%eax
80484cb: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp)
80484d2: 00
80484d3: 89 04 24 mov %eax,(%esp)
80484d6: e8 65 fe ff ff call 8048340 <printf@plt>
80484db: b8 1c 87 04 08 mov $0x804871c,%eax
80484e0: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80484e7: 00
80484e8: 89 04 24 mov %eax,(%esp)
80484eb: e8 50 fe ff ff call 8048340 <printf@plt>
80484f0: b8 25 87 04 08 mov $0x8048725,%eax
80484f5: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80484fc: 00
80484fd: 89 04 24 mov %eax,(%esp)
8048500: e8 3b fe ff ff call 8048340 <printf@plt>
8048505: b8 2d 87 04 08 mov $0x804872d,%eax
804850a: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
8048511: 00
8048512: 89 04 24 mov %eax,(%esp)
8048515: e8 26 fe ff ff call 8048340 <printf@plt>
804851a: b8 36 87 04 08 mov $0x8048736,%eax
804851f: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp)
8048526: 00
8048527: 89 04 24 mov %eax,(%esp)
804852a: e8 11 fe ff ff call 8048340 <printf@plt>
804852f: b8 40 87 04 08 mov $0x8048740,%eax
8048534: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
804853b: 00
804853c: 89 04 24 mov %eax,(%esp)
804853f: e8 fc fd ff ff call 8048340 <printf@plt>
8048544: b8 49 87 04 08 mov $0x8048749,%eax
8048549: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
8048550: 00
8048551: 89 04 24 mov %eax,(%esp)
8048554: e8 e7 fd ff ff call 8048340 <printf@plt>
8048559: b8 54 87 04 08 mov $0x8048754,%eax
804855e: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
8048565: 00
8048566: 89 04 24 mov %eax,(%esp)
8048569: e8 d2 fd ff ff call 8048340 <printf@plt>
804856e: b8 61 87 04 08 mov $0x8048761,%eax
8048573: c7 44 24 04 01 00 00 movl $0x1,0x4(%esp)
804857a: 00
804857b: 89 04 24 mov %eax,(%esp)
804857e: e8 bd fd ff ff call 8048340 <printf@plt>
8048583: b8 1c 87 04 08 mov $0x804871c,%eax
8048588: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
804858f: 00
8048590: 89 04 24 mov %eax,(%esp)
8048593: e8 a8 fd ff ff call 8048340 <printf@plt>
8048598: b8 25 87 04 08 mov $0x8048725,%eax
804859d: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80485a4: 00
80485a5: 89 04 24 mov %eax,(%esp)
80485a8: e8 93 fd ff ff call 8048340 <printf@plt>
80485ad: b8 2d 87 04 08 mov $0x804872d,%eax
80485b2: c7 44 24 04 08 00 00 movl $0x8,0x4(%esp)
80485b9: 00
80485ba: 89 04 24 mov %eax,(%esp)
80485bd: e8 7e fd ff ff call 8048340 <printf@plt>
80485c2: b8 69 87 04 08 mov $0x8048769,%eax
80485c7: c7 44 24 04 04 00 00 movl $0x4,0x4(%esp)
80485ce: 00
80485cf: 89 04 24 mov %eax,(%esp)
80485d2: e8 69 fd ff ff call 8048340 <printf@plt>
80485d7: b8 73 87 04 08 mov $0x8048773,%eax
80485dc: c7 44 24 04 06 00 00 movl $0x6,0x4(%esp)
80485e3: 00
80485e4: 89 04 24 mov %eax,(%esp)
80485e7: e8 54 fd ff ff call 8048340 <printf@plt>
80485ec: b8 7f 87 04 08 mov $0x804877f,%eax
80485f1: c7 44 24 04 06 00 00 movl $0x6,0x4(%esp)
80485f8: 00
80485f9: 89 04 24 mov %eax,(%esp)
80485fc: e8 3f fd ff ff call 8048340 <printf@plt>
8048601: b8 00 00 00 00 mov $0x0,%eax
8048606: 8b 54 24 3c mov 0x3c(%esp),%edx
804860a: 65 33 15 14 00 00 00 xor %gs:0x14,%edx
8048611: 74 05 je 8048618 <main+0x1e4>
8048613: e8 38 fd ff ff call 8048350 <__stack_chk_fail@plt>
8048618: c9 leave
8048619: c3 ret
804861a: 90 nop
804861b: 90 nop
804861c: 90 nop
804861d: 90 nop
804861e: 90 nop
804861f: 90 nop
08048620 <__libc_csu_init>:
8048620: 55 push %ebp
8048621: 57 push %edi
8048622: 56 push %esi
8048623: 53 push %ebx
8048624: e8 69 00 00 00 call 8048692 <__i686.get_pc_thunk.bx>
8048629: 81 c3 cb 19 00 00 add $0x19cb,%ebx
804862f: 83 ec 1c sub $0x1c,%esp
8048632: 8b 6c 24 30 mov 0x30(%esp),%ebp
8048636: 8d bb 20 ff ff ff lea -0xe0(%ebx),%edi
804863c: e8 b7 fc ff ff call 80482f8 <_init>
8048641: 8d 83 20 ff ff ff lea -0xe0(%ebx),%eax
8048647: 29 c7 sub %eax,%edi
8048649: c1 ff 02 sar $0x2,%edi
804864c: 85 ff test %edi,%edi
804864e: 74 29 je 8048679 <__libc_csu_init+0x59>
8048650: 31 f6 xor %esi,%esi
8048652: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
8048658: 8b 44 24 38 mov 0x38(%esp),%eax
804865c: 89 2c 24 mov %ebp,(%esp)
804865f: 89 44 24 08 mov %eax,0x8(%esp)
8048663: 8b 44 24 34 mov 0x34(%esp),%eax
8048667: 89 44 24 04 mov %eax,0x4(%esp)
804866b: ff 94 b3 20 ff ff ff call *-0xe0(%ebx,%esi,4)
8048672: 83 c6 01 add $0x1,%esi
8048675: 39 fe cmp %edi,%esi
8048677: 75 df jne 8048658 <__libc_csu_init+0x38>
8048679: 83 c4 1c add $0x1c,%esp
804867c: 5b pop %ebx
804867d: 5e pop %esi
804867e: 5f pop %edi
804867f: 5d pop %ebp
8048680: c3 ret
8048681: eb 0d jmp 8048690 <__libc_csu_fini>
8048683: 90 nop
8048684: 90 nop
8048685: 90 nop
8048686: 90 nop
8048687: 90 nop
8048688: 90 nop
8048689: 90 nop
804868a: 90 nop
804868b: 90 nop
804868c: 90 nop
804868d: 90 nop
804868e: 90 nop
804868f: 90 nop
08048690 <__libc_csu_fini>:
8048690: f3 c3 repz ret
08048692 <__i686.get_pc_thunk.bx>:
8048692: 8b 1c 24 mov (%esp),%ebx
8048695: c3 ret
8048696: 90 nop
8048697: 90 nop
8048698: 90 nop
8048699: 90 nop
804869a: 90 nop
804869b: 90 nop
804869c: 90 nop
804869d: 90 nop
804869e: 90 nop
804869f: 90 nop
080486a0 <__do_global_ctors_aux>:
80486a0: 55 push %ebp
80486a1: 89 e5 mov %esp,%ebp
80486a3: 53 push %ebx
80486a4: 83 ec 04 sub $0x4,%esp
80486a7: a1 14 9f 04 08 mov 0x8049f14,%eax
80486ac: 83 f8 ff cmp $0xffffffff,%eax
80486af: 74 13 je 80486c4 <__do_global_ctors_aux+0x24>
80486b1: bb 14 9f 04 08 mov $0x8049f14,%ebx
80486b6: 66 90 xchg %ax,%ax
80486b8: 83 eb 04 sub $0x4,%ebx
80486bb: ff d0 call *%eax
80486bd: 8b 03 mov (%ebx),%eax
80486bf: 83 f8 ff cmp $0xffffffff,%eax
80486c2: 75 f4 jne 80486b8 <__do_global_ctors_aux+0x18>
80486c4: 83 c4 04 add $0x4,%esp
80486c7: 5b pop %ebx
80486c8: 5d pop %ebp
80486c9: c3 ret
80486ca: 90 nop
80486cb: 90 nop
Disassembly of section .fini:
080486cc <_fini>:
80486cc: 53 push %ebx
80486cd: 83 ec 08 sub $0x8,%esp
80486d0: e8 00 00 00 00 call 80486d5 <_fini+0x9>
80486d5: 5b pop %ebx
80486d6: 81 c3 1f 19 00 00 add $0x191f,%ebx
80486dc: e8 cf fc ff ff call 80483b0 <__do_global_dtors_aux>
80486e1: 83 c4 08 add $0x8,%esp
80486e4: 5b pop %ebx
80486e5: c3 ret
补充:编译命令:gcc sizeof.c -o sizeof -Wall。(-Wall是为了将警告信息也显示出来)一下是分步骤
C语言编译过程
预处理:gcc sizeof.c -o sizeof.i -E
处理预处理语句(比如#include ,#define,#if之类的语句),去掉注释
编译:gcc sizeof.i -o sizeof.s -S
将C语言语句转化为汇编
汇编:gcc sizeof.s -o sizeof.o -c
将汇编语句转化为二进制代码(只检查当前文件有没有语法问题)
链接:gcc sizeof.o -o sizeof
跟所有的程序文件联合生成(建立数据段)可执行程序(比如链接多个文件,或者是调用其他库文件等)
注:生成的可执行文件,如果没有可执行权限的需要添加可执行权限。
执行命令 chmod a+x sizeof (将全部人员都添加可执行权限,all(包括拥有者,同组,其他用户))
更多推荐
所有评论(0)