这是使我的编译器启动Linux / ARM程序的方法:
asm(" .textn"" .globl _startn"" .align 2n""_start:n"" sub lr, lr, lrn"// Clear the link register." ldr r0, [sp]n" // Get argc..." add r1, sp, #4n"// ... and argv ..." add r2, r1, r0, LSL #2n" // ... and compute environ." bl _estartn" // Let's go!" b .n" // Never gets here." .size _start, .-_startn");如您所见,我只是从[sp]的堆栈中获取了argc,argv和环境材料。
一些澄清:堆栈指针指向进程内存中的有效区域。r0,r1,r2和r3是被调用函数的前三个参数。我分别用argc,argv和environ填充它们。



