入口点被认为是程序中的第一个点。因此,如果我从程序中的任何位置开始进行分析,可以认为它不是一个切入点。请帮帮我!谢谢大家。

评论

入口点是执行开始的地方

#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()”函数。