这是c:
中的一个例子#include <stdio.h>
#include <string.h>
void bad() {
printf("Oh shit really bad~!\r\n");
}
void foo() {
char overme[4] = "WOW";
*(int*)(overme+8) = (int)bad;
}
int main() {
foo();
}
答案 0 :(得分:9)
事实上,Python和PHP被解释为其他人建议的事实并非如此。关键是他们公开的几乎所有API和语言语义都经过严格的错误检查,因此无法获得可利用的未定义行为。即使你编译语言,它仍然是不可能的。这并不意味着您无法公开可以执行任何操作的不安全API。事实上,使用Pythons ctypes模块,应该可以创建一个类似的行为,但是偶然地更难以这样做。
答案 1 :(得分:2)
由于PHP是一种脚本语言,没有指针,字符串类型是二进制安全的,所以这些东西在PHP中不起作用。
但你为什么要做这样的事呢?
(哦,PHP中可能存在错误导致缓冲区溢出,但这并不是任何可以依赖的东西,并且通常是固定得很快......)
答案 2 :(得分:2)
我们很抱歉:你已经陷入了Python的弱点。不幸的是,它是设计的,所以很少有人可以做到这一点。也许你应该留在C。
正如Martin诉Löwissaid:
PS哇。好像几个月前我读过那篇帖子,但它已经有7年零一天了。Python不支持缓冲区溢出,抱歉。
答案 3 :(得分:1)
在PHP中执行类似的操作不会导致相同的行为。
解释PHP并始终检查您正在执行的操作是否有效。所以您不能 - 例如 - 超出缓冲区。
答案 4 :(得分:1)
因为php,python和每种解释语言首先必须通过翻译,而你没有完全访问内存,这种语言不会让你像你发布的代码那样做某种游戏。
答案 5 :(得分:0)
Traceback (most recent call last):
File "libs/olx/crawler_ads_information.py", line 100, in <module>
run(link_base)
File "libs/olx/crawler_ads_information.py", line 38, in run
information = getVehicleInformation(page_ad)
File "libs/olx/crawler_ads_information.py", line 49, in getVehicleInformation
dataLayer = json.loads(s)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)