作者mecs (mecs)
看板LinuxDev
标题Re: [问题] shellcode会core dump
时间Fri Dec 31 15:55:10 2010
※ 引述《imprazaguy (Wayne)》之铭言:
恕删
:
: 不过将 foo2 改成你的 shellcode 结果就 code dump 了
: 如果你的shellcode没错的话,我猜测的原因是:
: http://en.wikipedia.org/wiki/Executable_space_protection
:
: 原PO你觉得呢?
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.112.30.141
: → cobrasgo:我刚刚也查到了,用readelf可以看到STACK的flag是RW 12/30 17:49
: → cobrasgo:感谢回应 12/30 17:51
你需要 E (executable) flag. RW 是不够的.
1. echo 0 > /proc/sys/kernel/exec-shield (for Redhat/Fedora)
or
2. 编译时加上 -Wl,-z,execstack
另外就是,printf 是一定会被执行的。因为你是覆写
到 test() 的 return address,而不是 printf。
如果你要测试 test() 会不会回到 main(),应该是把
printf() 放在 main() 里面(在 test()之後)。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.4.4.192
1F:推 cobrasgo:感谢回应。不过请教一下,1和2的知识是哪里看到的呢?是 01/01 15:04
2F:→ cobrasgo:看哪个topic的东西会讲到1和2的内容? 01/01 15:05
4F:→ mecs:man page of gcc and ld 01/01 15:31
※ 编辑: mecs 来自: 24.4.4.192 (01/01 15:32)
5F:推 cobrasgo:gcc man page我有翻过,stack相关的字应该没有execstack 01/01 16:07
6F:→ cobrasgo:原来是ld的man page里的东西,我怎麽忘了翻... 01/01 16:08
7F:→ cobrasgo:看来我对这方面的sense还是太差,连要翻什麽都翻不好… 01/01 16:09
8F:→ cobrasgo:想想在ld里翻而是有道理的,为真正的virtual address在 01/01 16:11
9F:→ cobrasgo:linking阶段才会决定,这时候决定stack的属性是有道里的 01/01 16:11
10F:→ cobrasgo: 翻到 01/01 16:12