相关疑难解决方法(0)

GCC在x86,win32上的空程序的汇编输出

我编写空程序来惹恼stackoverflow程序员的地狱,不是.我正在探索gnu工具链.

现在以下对我来说可能太深了,但是为了继续执行空程序传奇,我已经开始检查C编译器的输出,GNU作为消耗的东西.

gcc version 4.4.0 (TDM-1 mingw32)
Run Code Online (Sandbox Code Playgroud)

test.c的:

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc -S test.c

    .file   "test.c"
    .def    ___main;    .scl    2;  .type   32; .endef
    .text
.globl _main
    .def    _main;  .scl    2;  .type   32; .endef
_main:
    pushl   %ebp
    movl    %esp, %ebp
    andl    $-16, %esp
    call    ___main
    movl    $0, %eax
    leave
    ret 
Run Code Online (Sandbox Code Playgroud)

你能解释一下这里发生的事吗?这是我努力理解它.我使用了as手册和我的最小x86 ASM知识:

  • .file "test.c" 是逻辑文件名的指令.
  • .def:根据文档"开始定义符号名称的调试信息".什么是符号(函数名称/变量?)以及什么样的调试信息?
  • .scl:docs说"存储类可以标记符号是静态的还是外部的".这是我从C中知道的静态外部吗?什么是'2'?
  • .type:存储参数"作为符号表条目的类型属性",我不知道.
  • .endef: 没问题.
  • .text:现在这是有问题的,它似乎是一个叫做section的东西,我已经读过它的代码所在,但是文档并没有告诉我太多. …

c x86 gcc gnu-assembler tdm-mingw

55
推荐指数
3
解决办法
5594
查看次数

谁将在目标c中调用Main方法

我想知道谁会在objective-c中调用main方法?

我知道UIApplicationMain(nil,nil,nil,NSStringFromClass [Appdelgate类])方法是从main()方法调用,然后从appdelegate didFinishLaunchingWithOptions()方法继续处理.....

我也知道java中的main()方法是由JVM调用的,而进程是从main()方法继续进行的.

就像那样,我想知道谁会在objective-c中调用main().

感谢帮助

iphone

5
推荐指数
1
解决办法
1693
查看次数

为什么我的gcc输出中有额外的说明?

GCC编译(使用gcc --omit-frame-pointer -s):

    int the_answer() { return 42; }
Run Code Online (Sandbox Code Playgroud)

            .Text
    .globl _the_answer
    _the_answer:
        subl    $12, %esp
        movl    $42, %eax
        addl    $12, %esp
        ret
       .subsections_via_symbols
Run Code Online (Sandbox Code Playgroud)

什么是'$ 12'常数在这里做什么,'%esp'寄存器是什么?

x86 assembly gcc

4
推荐指数
1
解决办法
1224
查看次数

标签 统计

gcc ×2

x86 ×2

assembly ×1

c ×1

gnu-assembler ×1

iphone ×1

tdm-mingw ×1