我正在使用gcc编译一个非常基本的“hello world”程序,使用以下命令行:
gcc -m32 prog_cible.c -o prog_cible
我对入口点地址感到非常惊讶:
readelf -h prog_cible
...
Entry point: 0x420
我用这个命令调高了alsr:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
我认为这不是真正的切入点。 我想基地址被添加到0x420? 在过去,10年前,readelf给了我很好的切入点。从那以后发生了什么变化?
由于
答案 0 :(得分:1)
我认为这不是真正的切入点。
你是对的。您的gcc
可能默认配置为构建PIE
二进制文件。 PIE
二进制文件实际上是共享库的一种特殊形式。
如果您查看二进制文件的type
(readelf -h
也打印过),您会看到它是DYN
,而不是EXEC
。
您可以使用PIE
停用gcc -m32 -no-pie ...
,然后您的入口点将显示为0x8048420
。