linux 溢出 段错误,导致缓冲区溢出,段错误

我试图在以下非常简单的程序中导致缓冲区溢出:

#include

#include

void badf(int n, char c, char* buffer)

{

char mycode[] = {

0xeb, 0x0f, 0xb8, 0x0b,

0x00, 0x00, 0x00, 0x8b,

0x1c, 0x24, 0x8d, 0x0c,

0x24, 0x31, 0xd2, 0xcd,

0x80, 0xe8, 0xec, 0xff,

0xff, 0xff, 0x2f, 0x62,

0x69, 0x6e, 0x2f, 0x6c,

0x73, 0x00, 0x00, 0x00,

0x00, 0x00, 0x00, 0x00,

0x00

}; // 37 bytes

// Overwrite Base Pointer

//mycode[37] = 0x29;

//mycode[38] = 0xf4;

//mycode[39] = 0xff;

//mycode[40] = 0xbf;

// Overwrite Instruction Pointer

// Using debugger, found mycode[] to be loaded in: 0xbffff42d

mycode[41] = 0x2d;

mycode[42] = 0xf4;

mycode[43] = 0xff;

mycode[44] = 0xbf;

}

void f(int n, char c)

{

char buffer[37];

badf(n,c,buffer);

}

void test()

{

printf("test");

}

int main()

{

f(37,0x00);

return 0;

}

(我已成功设法从缓冲区溢出执行test()之前)现在我正在尝试通过在堆栈中使用mycode的开头覆盖指令指针来执行mycode [].

这只有一半工作,程序跳转到正确的地址,我可以在调试器中看到正确的机器代码,但随后崩溃时出现分段错误,而不是执行以下指令(参见屏幕截图).

我试图弄清楚为什么他在执行“注入”代码的内容之前崩溃了.我对这类东西比较新,我理解分段错误意味着我试图访问操作系统不希望我的内存?

(PS:32位Linux机器,用-fno-stack-protector编译,所以我可以玩这个东西)

(如果需要更多信息,我很乐意更新帖子)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值