了解main程序集中的argc和argv

问题描述

我具有以下C程序,以了解如何通过mainargc调用argv函数,如下所示:

#include <stdio.h>

int main(int argc,char *argv[]) {
 // use a non-zero value so we can easily tell it ran properly with echo $?
    return 3;
}

使用$ gcc ifile.c -S -o ifile.s进行的非优化程序集输出为我们提供了

    .file   "ifile.c"
    .text
    .globl  main
    .type   main,@function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6,-16
    movq    %rsp,%rbp
    .cfi_def_cfa_register 6

    movl    %edi,-4(%rbp)  <== here
    movq    %rsi,-16(%rbp) <== here

    movl    $3,%eax
    popq    %rbp
    .cfi_def_cfa 7,8
    ret
    .cfi_endproc
.LFE0:
    .size   main,.-main
    .ident  "GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0"
    .section    .note.GNU-stack,"",@progbits

除了上面两行将返回值移至%eax之外,我理解这一点:

    movl    %edi,-4(%rbp)
    movq    %rsi,-16(%rbp)

这两行在做什么?我在猜测第一行,因为它的偏移量为4,正在填充argc的整数值,第二个参数正在传递一个填充为16的(8字节)指针,用于可以在字符串中传递的字符串。 argv。这是对这些项目的正确理解吗?在哪里可以了解更多信息,而不仅仅是完整的ABI信息,而是有关main()函数如何调用的具体细节/内部信息?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)