开发者

How do you build a C program that includes the entry point on Mac OS X?

开发者 https://www.devze.com 2023-01-28 03:25 出处:网络
How do you build a C program that includes the entry point on Mac OS X? I want to build: start() { /* exit system call */

How do you build a C program that includes the entry point on Mac OS X?

I want to build:

start() {
    /* exit system call */
    asm("movl $1,%eax;"
        "xorl %ebx,%ebx;"
        "int  $0x80"
    );
}

but when I run:

gcc -nostdlib min.c

I always get:

ld: could not find entry point "start" (perhaps missing crt1.开发者_JAVA技巧o)
collect2: ld returned 1 exit status

The one other attempt I made just to see what it was doing was run:

gcc -nostdlib -c min.c && otool -tV min.o

And the output was:

(__TEXT,__text) section
_start:
0000000000000000    pushq   %rbp
0000000000000001    movq    %rsp,%rbp
0000000000000004    leave
0000000000000005    ret

So where did that underscore come from before the "start" function? How do I prevent that from happening? Or more simply:

How do you build a C program that includes the entry point on Mac OS X?

Thanks, CrazyChenz


You can control the symbol that gcc gives to the function by declaring it separately with asm:

void start() asm ("start");

Make sure this is a standalone declaration, separate from the function definition.

You can read more details about controlling the generated symbol here: https://stackoverflow.com/a/1035937/12928775

Also, as Peter Cordes points out, you should probably include __attribute__((naked)) on the function definition to prevent gcc from generating a stack frame on entry.

The full code would be:

void start() asm ("start");

__attribute__((naked)) void start() {
    /* exit system call */
    asm("movl $1,%eax;"
        "xorl %ebx,%ebx;"
        "int  $0x80"
    );
}


The gcc -e option defines the entry point, when you want the entry point to be something other than start. This way you can create mystart() as you entry point.

gcc -e mystart mycode.c -o mycode

I do not know how to set the -e option in Xcode.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号