1

我需要找到在虚拟环境(debian x86)中运行的 elf 文件的入口点。在主机上,我可以确定当前指令指针和所有其他 cpu 寄存器。因此可以确定内核函数调用。

函数load_elf_binary使用以下参数调用函数start_thread :

start_thread(regs,elf_entry,bprm->p);

所以我应该能够从 cpu 寄存器接收 elf_entry ,但是当我转储寄存器时,我得到这个输出:

EAX=0xc61bffb4
EBX=0xc61bffb4
ECX=0xbff29430
EDX=0xb78ae850
ESI=0xc78f9500
EDI=0xbff29fec
EBP=0xbff29488
ESP=0xc61bfeb4
EIP=0xc1001f82
CR2=0xb78ca840

没有寄存器的值以 0x8xxxxxxx 开头,所以我不确定是我犯了错误还是 elf_entry 不是我要查找的入口点。

本质问题:内核函数load_elf_binary中的变量elf_entry是我用readelf -h得到的入口点吗?

4

2 回答 2

2

elf_entry在该函数上,仅对应于静态二进制文件的 ELF 入口点,对于动态二进制文件,它对应于动态链接器的入口点(最终应该调用二进制文件的入口点),请参见http://lxr.free-electrons.com /source/fs/binfmt_elf.c?v=2.6.32#L888

于 2012-01-09T19:04:04.483 回答
0

用 printk 编译新内核后,我了解到 new_ip 总是以 0xb78xxxxxx 开头,所以 elf_entry 和 elf 文件的入口点不一样。

于 2012-01-09T14:35:55.953 回答