- 论坛徽章:
- 0
|
原帖由 OwnWaterloo 于 2010-1-30 17:33 发表
当然是不能保证的。 C标准里几乎没怎么提stack-frame, 好像只有一个function image还是什么的。
也没说参数一定是由栈传入。
如果将讨论限制到i386下的cdecl调用约定, 你觉得呢? 返回地址和第0个参 ...
是我的话,我就直接加编译参数了。所以这个offset是可计算的。所以,回到我的出发点,我就觉得anchor有点多余了。
发现整天对着计算机,要和人解释清楚自己的想法还真不是一般的难啊。
另,我在Linux试了一下,即使是mprotect改了权限,也不能把printf改写,怎么办?
- unsigned long page = ((unsigned long)printf >> 12) << 12;
- unsigned long offset = ((unsigned long)printf) % 4096;
- mprotect(page, 4096, PROT_WRITE|PROT_READ);
- memcpy((void*)printf, "12345", 5);
复制代码
会segfault的。 |
|