ld有多种方法设置进程入口地址, 按一下顺序: (编号越前, 优先级越高) 1, ld命令行的-e选项 2, 连接脚本的ENTRY(SYMBOL)命令 eg. ENTRY(_start) /* Entry point of application*/ 3, 如果定义了start符号, 使用_start符号值 4, 如果存在.text section, 使用.text section的第一字节的位置值 5, 使用值0 (一)通常例子
32位Linux系统,即起始地址为0x08048000,可以看到顺序为只读段(代码段等)、读写段(数据段、bss段等)、堆(向上即高地址扩展)、用于堆扩展的未使用空间、动态库的映射位置(0x40000000开始)、之后就是栈(向下即低地址扩展)以及用于栈扩展的未使用空间、最后是内核空间。 其中栈最大的不同就是从高地址向低地址扩展,同时有esp指针一直指向栈顶(低地址),另外栈的原则是先入后出。