【发布时间】:2011-07-09 23:11:24
【问题描述】:
在 Linux/i386 系统上查看 gcc 生成的 elf 可执行文件时,它似乎总是在调用“main”之后和“nop”填充之前放置一个停止指令(0xf4),例如:
│ ....... ! entrypoint:
│ ....... ! xor ebp, ebp
│ 80482e2 ! pop esi
│ 80482e3 ! mov ecx, esp*emphasized text*
│ 80482e5 ! and esp, 0fffffff0h
│ 80482e8 ! push eax
│ 80482e9 ! push esp
│ 80482ea ! push edx
│ 80482eb ! push __libc_csu_fini
│ 80482f0 ! push __libc_csu_init
│ 80482f5 ! push ecx
│ 80482f6 ! push esi
│ 80482f7 ! push main
│ 80482fc ! call wrapper_804a004_80482c4
│ 8048301 ! hlt <--- halt instruction
│ 8048302 ! nop
│ 8048303 ! nop
│ 8048304 ! nop
⋮
这样做的目的是什么? 永远不应达到此代码。这是某种保护措施吗?
【问题讨论】:
-
你确定这是由 gcc 生成的,而不是从运行时库链接的函数的一部分吗?
-
@Ben:这很好。不,它很可能由运行时库完成。但为什么? :-)