ld: warning: cannot find entry symbol _start; defaulting to 00000000080481d8

简介: 场景: 正常 经过  gcc -o loccheck  loccheck.c [root@luozhonghua 9]# ./loccheck in main(),pooh=2 and &pooh=0xbfcfa31c in main(),bah=5 and &bah=0xbfcfa318 ------------------------ in main(),p

场景:

正常 经过  gcc -o loccheck  loccheck.c

[root@luozhonghua 9]# ./loccheck
in main(),pooh=2 and &pooh=0xbfcfa31c
in main(),bah=5 and &bah=0xbfcfa318
------------------------
in main(),pooh=10 and &pooh=0xbfcfa2ec
in main(),bah=2 and &bah=0xbfcfa300


然后想看c中的&pooh地址值的变化

loccheck.c 经 gcc   -S  loccheck.c

汇编器汇编     as -gstabs -o locckeck1.o loccheck.s

连接器链接  

 [root@luozhonghua 9]# ld -dynamic-linker /lib/ld-linux.so.2 -lc -o loccheck1 locckeck1.o

ld: warning: cannot find entry symbol _start; defaulting to 00000000080481d8

[root@luozhonghua 9]# ./loccheck1

in main(),pooh=2 and &pooh=0xbfd209ec
in main(),bah=5 and &bah=0xbfd209e8
------------------------
in main(),pooh=10 and &pooh=0xbfd209bc
in main(),bah=2 and &bah=0xbfd209d0
Segmentation fault (core dumped)


警告表示汇编没有从_start开始 ,嗯看看

[root@luozhonghua 9]# cat loccheck.s
        .file   "loccheck.c"
        .section        .rodata
        .align 4
.LC0:
        .string "in main(),pooh=%d and &pooh=%p\n"
.LC1:
        .string "in main(),bah=%d and &bah=%p\n"
.LC2:
        .string "------------------------"
        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        andl    $-16, %esp
        subl    $32, %esp
        movl    $2, 28(%esp)
        movl    $5, 24(%esp)
        movl    28(%esp), %edx
        movl    $.LC0, %eax
        leal    28(%esp), %ecx
        movl    %ecx, 8(%esp)
        movl    %edx, 4(%esp)
        movl    %eax, (%esp)
        call    printf
        movl    24(%esp), %edx
        movl    $.LC1, %eax
        leal    24(%esp), %ecx
        movl    %ecx, 8(%esp)
        movl    %edx, 4(%esp)
        movl    %eax, (%esp)
        call    printf
        movl    $.LC2, (%esp)
        call    puts
        movl    28(%esp), %eax
        movl    %eax, (%esp)
        call    mikado
        movl    $0, %eax
        leave
        ret
        .size   main, .-main
.globl mikado
        .type   mikado, @function
mikado:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $40, %esp
        movl    $10, -12(%ebp)
        movl    -12(%ebp), %edx
        movl    $.LC0, %eax
        leal    -12(%ebp), %ecx
        movl    %ecx, 8(%esp)
        movl    %edx, 4(%esp)
        movl    %eax, (%esp)
        call    printf
        movl    8(%ebp), %edx
        movl    $.LC1, %eax
        leal    8(%ebp), %ecx
        movl    %ecx, 8(%esp)
        movl    %edx, 4(%esp)
        movl    %eax, (%esp)
        call    printf
        leave
        ret
        .size   mikado, .-mikado
        .ident  "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)"
        .section        .note.GNU-stack,"",@progbits


ok!  确实没有

使用gcc -S 把原始c汇编成汇编,确实少了_start  开始标志

但依然还是能汇编成正常的可执行文件且结果正常

因此,这里警告依然是没问题的,可忽略,这是工具gcc自身反汇编机制






目录
相关文章
|
9月前
|
Java
java——成功解决cannot resolve symbol ‘xxx’
java——成功解决cannot resolve symbol ‘xxx’
|
11月前
|
IDE 开发工具
Cannot resolve symbol ‘lombok‘
Cannot resolve symbol ‘lombok‘
256 0
|
缓存 Java 编译器
IDEA Cannot Resolve Symbol 问题的解决方法汇总
IDEA Cannot Resolve Symbol 问题的解决方法汇总
1161 0
|
JSON Java Android开发
android studio中出现Cannot resolve symbol 'json'问题完整简单解决方案
android studio中出现Cannot resolve symbol 'json'问题完整简单解决方案
457 0
android studio中出现Cannot resolve symbol 'json'问题完整简单解决方案
|
缓存
Cannot resolve symbol 'R' 解决的几种方法
Cannot resolve symbol 'R' 解决的几种方法
394 0
Cannot resolve symbol 'R' 解决的几种方法
|
Java jenkins 持续交付
Jenkins - cannot find symbol
Jenkins - cannot find symbol
865 0
|
Java
SpringBoot项目提示:Cannot resolve symbol 'RestController'
SpringBoot项目提示:Cannot resolve symbol 'RestController'
910 0
SpringBoot项目提示:Cannot resolve symbol 'RestController'
|
Android开发 API 开发工具
android studio gradle升级到4.10.2(android gradle插件升级到3.3.1版本),以后找不到R文件,Cannot resolve symbol'R'
项目的gradle 升级到了4.10.2,android gradle插件升级到了3.3.1,所以我本地也跟着升级了下。一切都下载好。配置好。build成功了,可是却找不到R文件。更奇怪的是项目可以正常运行。
2062 0
|
Go Windows 开发工具
解决golang windows调试问题:Could not determine version number: could not find symbol value for runtime.buildVersion
版本信息: go:1.8.3 windows: win7/64 idea-go-plugin:171.4694.61 在windows下,使用dlv进行调试的时候,如果golang程序引入了c模块,比如常用的sqlite模块,那么在调试的时候一定会发生这个错误: · Could not determine version number: could not find symbol value for runtime.buildVersion· 现在这个问题已经解决了,解决方法就是go build 的时候加入-ldflags="-linkmode internal" ,这样就可以正常调试了。
2121 0
|
IDE 开发工具
你绝对想不到R文件找不到(cannot resolve symbol R)的原因
你绝对想不到R文件找不到(cannot resolve symbol R)的原因 最近在项目开发中 Android Studio 的 R 文件突然找不到了。IDE 中出现了以下提示 cannot resolve symbol R Clean And Rebuild 一般来说看...
1826 0