main函数argv两种参数差异比较
来源:互联网 发布:网络洗剪吹是什么意思 编辑:程序博客网 时间:2024/06/05 08:25
#include <stdio.h> | #include <stdio.h>
|
int main(int argc,char ** argv) | int main(int argc,char * argv[])
{ | {
|
for (register i=0 ;i <argc ;i++) | for (register i=0 ;i <argc ;i++)
printf("%s\n",*argv++); | printf("%s\n",argv[i]);
|
} | }
|
Dump of assembler code for function main: |
4 { | Dump of assembler code for function main:
0x0000000000400530 <+0>: push rbp | 4{
0x0000000000400531 <+1>: mov rbp,rsp | 0x0000000000400530 <+0>:push rbp
0x0000000000400534 <+4>: push rbx | 0x0000000000400531 <+1>:mov rbp,rsp
0x0000000000400535 <+5>: sub rsp,0x18 | 0x0000000000400534 <+4>:push rbx
0x0000000000400539 <+9>: mov DWORD PTR [rbp-0x14],edi | 0x0000000000400535 <+5>:sub rsp,0x18
0x000000000040053c <+12>: mov QWORD PTR [rbp-0x20],rsi | 0x0000000000400539 <+9>:mov DWORD PTR [rbp-0x14],edi
| 0x000000000040053c <+12>:mov QWORD PTR [rbp-0x20],rsi
5 |
6 for (register i=0 ;i <argc ;i++) | 5
=> 0x0000000000400540 <+16>: mov ebx,0x0 | 6 for (register i=0 ;i <argc ;i++)
0x0000000000400545 <+21>: jmp 0x400561 <main+49> | => 0x0000000000400540 <+16>:mov ebx,0x0
0x000000000040055e <+46>: add ebx,0x1 | 0x0000000000400545 <+21>:jmp 0x400567 <main+55>
0x0000000000400561 <+49>: cmp ebx,DWORD PTR [rbp-0x14] | 0x0000000000400564 <+52>:add ebx,0x1
0x0000000000400564 <+52>: jl 0x400547 <main+23> | 0x0000000000400567 <+55>:cmp ebx,DWORD PTR [rbp-0x14]
0x0000000000400566 <+54>: mov eax,0x0 | 0x000000000040056a <+58>:jl 0x400547 <main+23>
| 0x000000000040056c <+60>:mov eax,0x0
|
7 printf("%s\n",*argv++); | 7 printf("%s\n",argv[i]);
0x0000000000400547 <+23>: mov rax,QWORD PTR [rbp-0x20] | 0x0000000000400547 <+23>:movsxd rax,ebx
0x000000000040054b <+27>: lea rdx,[rax+0x8] | 0x000000000040054a <+26>:lea rdx,[rax*8+0x0]
0x000000000040054f <+31>: mov QWORD PTR [rbp-0x20],rdx | 0x0000000000400552 <+34>:mov rax,QWORD PTR [rbp-0x20]
0x0000000000400553 <+35>: mov rax,QWORD PTR [rax] | 0x0000000000400556 <+38>:add rax,rdx
0x0000000000400556 <+38>: mov rdi,rax | 0x0000000000400559 <+41>:mov rax,QWORD PTR [rax]
0x0000000000400559 <+41>: call 0x400410 <puts@plt> | 0x000000000040055c <+44>:mov rdi,rax
| 0x000000000040055f <+47>:call 0x400410 <puts@plt>
8 |
9 } | 8
0x000000000040056b <+59>: add rsp,0x18 | 9}
0x000000000040056f <+63>: pop rbx | 0x0000000000400571 <+65>:add rsp,0x18
0x0000000000400570 <+64>: pop rbp | 0x0000000000400575 <+69>:pop rbx
0x0000000000400571 <+65>: ret | 0x0000000000400576 <+70>:pop rbp
| 0x0000000000400577 <+71>:ret
End of assembler dump. | |
| End of assembler dump.
|
int main(int argc,char ** argv) | int main(int argc,char * argv[])
{ | {
|
for (register i=0 ;i <argc ;i++) | for (register i=0 ;i <argc ;i++)
printf("%s\n",*argv++); | printf("%s\n",argv[i]);
|
} | }
|
Dump of assembler code for function main: |
4 { | Dump of assembler code for function main:
0x0000000000400530 <+0>: push rbp | 4{
0x0000000000400531 <+1>: mov rbp,rsp | 0x0000000000400530 <+0>:push rbp
0x0000000000400534 <+4>: push rbx | 0x0000000000400531 <+1>:mov rbp,rsp
0x0000000000400535 <+5>: sub rsp,0x18 | 0x0000000000400534 <+4>:push rbx
0x0000000000400539 <+9>: mov DWORD PTR [rbp-0x14],edi | 0x0000000000400535 <+5>:sub rsp,0x18
0x000000000040053c <+12>: mov QWORD PTR [rbp-0x20],rsi | 0x0000000000400539 <+9>:mov DWORD PTR [rbp-0x14],edi
| 0x000000000040053c <+12>:mov QWORD PTR [rbp-0x20],rsi
5 |
6 for (register i=0 ;i <argc ;i++) | 5
=> 0x0000000000400540 <+16>: mov ebx,0x0 | 6 for (register i=0 ;i <argc ;i++)
0x0000000000400545 <+21>: jmp 0x400561 <main+49> | => 0x0000000000400540 <+16>:mov ebx,0x0
0x000000000040055e <+46>: add ebx,0x1 | 0x0000000000400545 <+21>:jmp 0x400567 <main+55>
0x0000000000400561 <+49>: cmp ebx,DWORD PTR [rbp-0x14] | 0x0000000000400564 <+52>:add ebx,0x1
0x0000000000400564 <+52>: jl 0x400547 <main+23> | 0x0000000000400567 <+55>:cmp ebx,DWORD PTR [rbp-0x14]
0x0000000000400566 <+54>: mov eax,0x0 | 0x000000000040056a <+58>:jl 0x400547 <main+23>
| 0x000000000040056c <+60>:mov eax,0x0
|
7 printf("%s\n",*argv++); | 7 printf("%s\n",argv[i]);
0x0000000000400547 <+23>: mov rax,QWORD PTR [rbp-0x20] | 0x0000000000400547 <+23>:movsxd rax,ebx
0x000000000040054b <+27>: lea rdx,[rax+0x8] | 0x000000000040054a <+26>:lea rdx,[rax*8+0x0]
0x000000000040054f <+31>: mov QWORD PTR [rbp-0x20],rdx | 0x0000000000400552 <+34>:mov rax,QWORD PTR [rbp-0x20]
0x0000000000400553 <+35>: mov rax,QWORD PTR [rax] | 0x0000000000400556 <+38>:add rax,rdx
0x0000000000400556 <+38>: mov rdi,rax | 0x0000000000400559 <+41>:mov rax,QWORD PTR [rax]
0x0000000000400559 <+41>: call 0x400410 <puts@plt> | 0x000000000040055c <+44>:mov rdi,rax
| 0x000000000040055f <+47>:call 0x400410 <puts@plt>
8 |
9 } | 8
0x000000000040056b <+59>: add rsp,0x18 | 9}
0x000000000040056f <+63>: pop rbx | 0x0000000000400571 <+65>:add rsp,0x18
0x0000000000400570 <+64>: pop rbp | 0x0000000000400575 <+69>:pop rbx
0x0000000000400571 <+65>: ret | 0x0000000000400576 <+70>:pop rbp
| 0x0000000000400577 <+71>:ret
End of assembler dump. | |
| End of assembler dump.
阅读全文
0 0
- main函数argv两种参数差异比较
- Main函数参数argc,argv
- main函数参数argc argv[]
- main函数的参数 argc argv env
- Main函数参数argc,argv说明
- Main函数参数argc,argv说明
- Main函数参数argc,argv说明
- Main函数参数argc,argv说明
- Main函数参数argc,argv说明
- Main函数参数argc,argv如何传入
- Main函数中参数argc,argv说明
- Main函数参数argc,argv说明
- main函数的参数argc与argv
- MAIN函数的参数argc, argv说明
- Main函数中参数argc,argv说明
- Main函数参数argc,argv说明
- Main函数参数argc,argv说明
- Main函数参数argc,argv说明
- 基于XML Schema的简化配置方式
- Spring+STOMP实现WebSocket广播订阅、权限认证、一对一通讯(附源码)
- 操作系统:经典进程同步问题(1)生产者-消费者问题
- 文章标题
- JavaScript Shell入门分享
- main函数argv两种参数差异比较
- 设计模式-开放封闭原则
- gdb常用命令
- 科学计算库Numpy-常用函数
- MyBatis学习资料
- Coursera算法UnionFind变迁史
- Object Detection系列(二) SPP-Net
- 信号的使用心得
- hopfield神经网络