当前位置: 技术问答>linux和unix
关于elf文件解析(帮顶有分)
来源: 互联网 发布时间:2016-06-26
本文导语: 问题概述: 2M的vmlinux elf文件,读到内存后,发现elf后面的数据与objdump出来的数据不一致。 详细描述: 1)编译内核镜像的时候生成了一个vmlinux ,大约2M 2)然后通过open文件的方式,根据文件的大小,分配动态...
问题概述:
2M的vmlinux elf文件,读到内存后,发现elf后面的数据与objdump出来的数据不一致。
详细描述:
1)编译内核镜像的时候生成了一个vmlinux ,大约2M
2)然后通过open文件的方式,根据文件的大小,分配动态缓存buf,再将文件读到buf。
3) 然后,把buf作为const void* 传递到一系列函数中去。比如,有一个函数是 void read_buf(const void* buf)
3)但是,我发现,在read_buf内,buf缓冲的比较靠后的数据,和用objdump -d vmlinux得到的数据不一致,也就是说,
在vmlinux偏移为x(x比较大,但不超过vmlinux的size)的指令,与buf+x 位置的指令,是不相等的。
请问这是什么原因?
我觉得要么是 vmlinux文件不能用单纯的read来读, 要么是buf后面的内容被盖了。
请问针对这个情况,大家有什么看法?
2M的vmlinux elf文件,读到内存后,发现elf后面的数据与objdump出来的数据不一致。
详细描述:
1)编译内核镜像的时候生成了一个vmlinux ,大约2M
2)然后通过open文件的方式,根据文件的大小,分配动态缓存buf,再将文件读到buf。
3) 然后,把buf作为const void* 传递到一系列函数中去。比如,有一个函数是 void read_buf(const void* buf)
3)但是,我发现,在read_buf内,buf缓冲的比较靠后的数据,和用objdump -d vmlinux得到的数据不一致,也就是说,
在vmlinux偏移为x(x比较大,但不超过vmlinux的size)的指令,与buf+x 位置的指令,是不相等的。
请问这是什么原因?
我觉得要么是 vmlinux文件不能用单纯的read来读, 要么是buf后面的内容被盖了。
请问针对这个情况,大家有什么看法?
|
也就是说,objdump并不是把每四个字节就反汇编一条语句
PS:你是用何种方法看到你读到buf中的vmlinux的反汇编语句的??
PS:你是用何种方法看到你读到buf中的vmlinux的反汇编语句的??
|
ELF 格式说明。
http://www.haoxiai.net/caozuoxitong/linux/7457.html
http://www.haoxiai.net/caozuoxitong/linux/7457.html
|
不懂,帮顶~~~
|
帮顶了。。
|
ELF文件有两种视图模式,一种是针对于存储在硬盘上的静态数据的视图;另一种是针对于运行中的内存中的动态
视图模式;所以当然有不同了,完全相同才奇怪呢~~
视图模式;所以当然有不同了,完全相同才奇怪呢~~
|
围观。。。。
|
不懂,帮顶
|
帮顶……