小编Whi*_*ask的帖子

为什么在C中使用指针?

我仍然想知道为什么在C中你不能简单地使用普通变量设置一些东西.变量本身是指向数据的指针,不是吗?那么为什么当你可以简单地使用原始变量时,指针指向变量中的数据呢?它是否可以访问所述变量中的特定位(或字节,我猜)?

我确信这是合乎逻辑的,但是我从来没有完全掌握这个概念,当阅读代码时*pointers总是把我抛弃.

c pointers

13
推荐指数
4
解决办法
6158
查看次数

64位Debian内核中的缓冲区溢出保护?

我在环境变量中存储了一些shellcode,并且正在尝试溢出程序.

./notesearch $(python -c 'print "\x01\x01\x01\x01\x01\x01\x01\x01" * 15 + "\x9e\xe7\xff\xff\xff\x7f"')
Run Code Online (Sandbox Code Playgroud)

这是因为它在GDB中运行时溢出效果很好,因为它会让我回到shell.但是,在GDB之外的事情并没有那么顺利.我关闭了ASLR,它最初给了我问题,直到我最终解决了这个问题,现在我正在使用C函数getenv()来获取我正在溢出程序的确切变量.我确信我正在填充保存的帧完美,因为当我从代码中删除最后6个字节时,我溢出程序时它不会出错,

./notesearch $(python -c 'print "\x01\x01\x95\xe6\xff\xff\xff\x7f" * 15') #no seg fault
Run Code Online (Sandbox Code Playgroud)

然而,当我向字符串添加单个字节后,它意味着我必须用最后一个字节命中保存的帧指针,如GDB进一步确认的那样.

./notesearch $(python -c 'print "\x01\x01\x95\xe6\xff\xff\xff\x7f" * 15 + "\x9e"') # does seg fault
Run Code Online (Sandbox Code Playgroud)

无论如何,我也编译了gcc notesearch.c -o notesearch -ggdb -fno-stack-protector -z execstack,正如我之前所说的那样,无论如何都在GDB中工作,所以我假设它更加内核保护?有任何想法吗?

buffer overflow

5
推荐指数
1
解决办法
132
查看次数

标签 统计

buffer ×1

c ×1

overflow ×1

pointers ×1