#1 楼
入口点不是您开始分析的地址,而是过程开始执行的地址。让我们快速浏览一下ELF32标头:
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
e_entry
成员实际上指向入口点:e_entry
该成员提供系统首先将控制权转移到的虚拟地址,从而开始了这一过程。如果文件没有关联的入口点,则此成员为零。
来源:http://www.sco.com/developers/gabi/latest/ch4.eheader.html
以及来自Wikipedia的更详细的描述:
在计算机编程中,入口是控制从操作系统转移到计算机程序的入口,处理器在该处输入程序。或代码片段开始执行
。在某些操作系统或编程语言中,
初始条目不是程序的一部分,而是运行时库的一部分,
在这种情况下,运行时库将初始化程序,然后进入运行库该程序。在其他情况下,程序
在第一次进入时可能会在执行任何操作之前调用运行时库,并且在运行时库返回后,程序的实际
代码开始执行。这标志着从
加载时间(和动态链接时间,如果存在)到运行时间的过渡。
评论
“入口点不是您开始分析的地址。”尽管确实如此,但是EOP是进行分析的一个很好的起点:)
–PawełŁukasik
18年4月25日在8:53
哈哈好点子:)
–巨型甜菜
18年4月25日在9:04
#2 楼
否!入口点是用于指向OS加载程序将启动程序的位置的“关键字”。对于给定的二进制文件(ELFBIN),您可以运行以下命令以读取二进制文件的标头信息(-h):为此:
readelf -h ELFBIN
如果仔细观察,您会发现入口点地址:0x400a80。地址,您将获得以下内容:
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x400a80
Start of program headers: 64 (bytes into file)
Start of section headers: 46528 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 31
Section header string table index: 30
这是_start函数,可在最终调用main之前准备某些参数/寄存器(请参见地址400aa4右侧的标签在示例中)包含“您的”代码。通常在二进制文件的所有其他部分已加载到内存中之后调用_start函数。在完成main之后,在本示例中,将执行hlt指令以终止执行。
这就是所谓的入口点。现在,关于分析,它必须在二进制文件中的某个位置开始,该位置使用地址(例如入口点)表示。
如果您要使用语言/专业术语,可以说:Analysis entry点而不是二进制入口点。
总而言之,这只是技术性关键字,必须正确定义它们。
希望这可以回答您的问题:)
评论
通常不会到达hlt指令,因为__libc_start_main如果main返回正常,则调用exit(2)。
–yyny
7月2日,11:40
#3 楼
入口点是系统加载器将开始执行可执行文件的位置。这是操作系统开始在您的程序中执行的入口点。类比可以是C / C ++编译器的“ main()”函数。
评论
入口点是执行开始的地方