对于c语言编译生成的.o文件的查看,直接在linux下是可以通过命令去查看的。
关于查看.o与.exe文件的例子:
首先编写一个1.c文件
clude<math.h>
int main()
{
int x = 1;
return 0;
}
gcc -c 1.c
进行编译生成1.o文件,然后通过objdump -h 1.o
可以查看该目标文件的信息:
可以看出此时VMA与LMA是0,所以编译阶段不分配内存
接着cc -o a 1.c -g
进行链接生成可执行的文件a,然后objdump -h a
查看
可以发现此时的VMA和LMA不为0,表示已经将可执行文件加载到内存并分配了存储空间。
objdump -S a
反汇编出源码,下图仅截取了部分内容。
其他的一些可以linux下查看可执行文件的相关信息的命令如下:
file 可执行文件 可查看可执行文件是ARM架构还是X86架构
nm 可执行文件 可查看文件中的符号,包括全局变量,全局函数等,可参考:https://www.cnblogs.com/downey-blog/p/9583765.html
ldd 可执行文件 可查看文件执行所需要的动态库
strings 可执行文件 可查看文件中所有的符号,包括编译器版本信息
readelf 可执行文件 可查看文件的所有详细信息,包括文件的头信息,动态库信息,段信息等
Linux下objdump使用方法可参考:https://blog.csdn.net/freeplayer/article/details/45133721