오브젝트는 변경 가능한 다음은이 같은 제 (내장 함수가) buffer()
의 두 번째 인수를 지정하지 않음으로써 수정 가능한 버퍼를 얻을 수 있다면 : 내 경우,size 인수가 설정되었을 때 복사하지 않고 buffer()를 쓸 수있게 할 수 있습니까?
>>> s = bytearray(1000000) # a million zeroed bytes
>>> t = buffer(s, 1) # slice cuts off the first byte
>>> s[1] = 5 # set the second element in s
>>> t[0] # which is now also the first element in t!
'\x05'
그러나 , 크기 매개 변수로 0x7fffffff
을 지정해야합니다. 이 경우 :
>>> b = buffer(bytearray('a'), 1,0x7fffffff)
how to make b
writeable without copying it’s data? 내 경우에는 _ctypes
지원이 비활성화되고 프로그램은 루트로 실행되지 않습니다.
물론 memoryview와 같은 것이 있지만 모든 가상 주소에서 메모리를 읽을 가능성이 느립니다.
보안 태그에주의를 기울였습니까? 내 질문에 [이 포함] (https://bugs.python.org/issue21831 "그들은 취약한 비단뱀의 버전을 사용합니다) 잊어 버렸습니다." 필자는 웹 사이트에서 임의의 파이썬 코드를 실행할 수있는 가능성을 얻었다. 하지만 해당 현상금 프로그램은 인터프리터에 사용되는 샌드 박스 (* 네이티브 어셈블리 코드를 실행해야 함) *를 피할 경우에만 보상을받습니다. – user2284570
'쓰기로 프로세스의 메모리가 손상됩니다. 이것이 내가하고 싶은 일입니다 : OS 레벨 샌드 박스를 벗어날 수있는 시스템 호출에 직접 액세스해야합니다. 파이썬 수준의 샌드 박스 * (파이썬 샌드 박스는 ᴏꜱ 수준의 샌드 박스를 벗어나지 못하게)를 우회 할 수 있도록 네이티브 어셈블리를 실행할 수 있어야합니다. – user2284570
@ user2284570 : 글쎄, 당신이 그 버그를 악용하려고한다면, 여러분은 'buffer'로 생성 된 버퍼 객체가 크기 인자를 전달하는지 여부와 관계없이 쓰기가 불가능하다는 추가적인 문제에 봉착하게됩니다. 쓰기가 가능한 Python 측 API. 버퍼 객체를 통한 쓰기가 아닌's [1] = 5'를 사용하여 bytearray를 통해 글을 작성했습니다. – user2357112