当前位置: 技术问答>linux和unix
请教,有什么办法修改ELF文件的可执行地址吗?
来源: 互联网 发布时间:2016-04-20
本文导语: S3C24X0上,Linux内核vmlinux的连接地址是0xc0008000 但是在在MMU被使能前,内核从0x30008000开始执行。 我现在想调试MMU使能前的这段代码,所以需要在GDB中载入vmlinux的符号表。 怎样才能把vmlinux中所有的地址以0x30008000...
S3C24X0上,Linux内核vmlinux的连接地址是0xc0008000
但是在在MMU被使能前,内核从0x30008000开始执行。
我现在想调试MMU使能前的这段代码,所以需要在GDB中载入vmlinux的符号表。
怎样才能把vmlinux中所有的地址以0x30008000为基址进行重新修订?
或者,有什么办法,把vmlinux的运行地址从0xc0008000改为0x30008000?
我当然可以指定基地址重新编译内核,但是这方法太笨,各位,有何良策?
但是在在MMU被使能前,内核从0x30008000开始执行。
我现在想调试MMU使能前的这段代码,所以需要在GDB中载入vmlinux的符号表。
怎样才能把vmlinux中所有的地址以0x30008000为基址进行重新修订?
或者,有什么办法,把vmlinux的运行地址从0xc0008000改为0x30008000?
我当然可以指定基地址重新编译内核,但是这方法太笨,各位,有何良策?
|
可能还是指定基地址重新编译内核来得可靠。如果去改ELF中地起始地址是可以改的,ELF本身可以从sector header中读出起始地址,讲这个地址改掉就是了,但是文件中有很多相对于这个地址的地址,或者是绝对地址。这些地址没法保证改完后一定可以工作。