实现下面功能有更高明的做法么?

dpdp_2012 2012-11-02 10:36:46
实现下面功能有更高明的做法么?
下面为windows环境下

#include <stdio.h>
#include <string.h>

#define N 3 //如果运行出错,试试 #define N 2

int b[2];

void fun2()
{
int a[2];
memcpy(a+N,b,8);
printf("fun2...\n");

}

void fun1()
{
int a[2];
memcpy(b,a+N,8);
a[N+1]=(int)fun2;
printf("fun1...\n");
}

int main()
{
fun1();
_asm{
push 1
}
printf("main...\n");
return 0;
}
...全文
225 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjain 2012-11-02
  • 打赏
  • 举报
回复
哎`没看懂这个是干啥的....
JiMoKuangXiangQu 2012-11-02
  • 打赏
  • 举报
回复
不过就是缓冲溢出,你覆盖我,我覆盖你之类的,然后营造某种巧合内容,换个编译器很可能立即失效.
甚至由release/debug编译模式立即结果不同.

lz想做黑客啊?呵呵!
帅得不敢出门 2012-11-02
  • 打赏
  • 举报
回复
这个编译器相关的.
dpdp_2012 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
C/C++ code
int main()
{
fun1();
_asm{
push 1
}
printf("main...\n");
return 0;
}

在main中调整esp好像不大合适吧?
[/Quote]
上面是我自己写的,我是想通过覆盖返回地址调用函数,但是不嵌入汇编调整esp堆栈始终不平衡,怎么弄呢
linxren 2012-11-02
  • 打赏
  • 举报
回复
int main()
{
fun1();
_asm{
push 1
}
printf("main...\n");
return 0;
}

在main中调整esp好像不大合适吧?
有点清眸 2012-11-02
  • 打赏
  • 举报
回复
画一个堆栈示意图差不多就知道了。
栈攻击的原理都差不多。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧