Tag: python

用C加密/解密加密Python脚本

重复(我没有找到答案): https : //stackoverflow.com/questions/4066361/how-to-obfuscate-python-code 如何保护Python代码? 所以我查看了^^上面的两个链接,我发现没有什么用于实际加密python脚本和/或混淆python代码。 所以我是C的新手,但是在python中经验丰富,如果我想开发商业python项目,我最好的想法是: 创建ac脚本和加密和编译的python脚本 C脚本需要简单地提供字符串加密密钥并对其进行解密。 仅仅是因为我从未真正尝试加密,我知道这不会是完美的。 但我不需要完美。 我只是想让我的python源代码反编译更难,意识到这仍然很容易但不容易。 我目前看过Cython,我可以轻松生成一个* .c文件,现在如何将其编译为二进制文件? (与视觉工作室) 那么我怎样才能加密我的python代码并从C脚本解密它(我可以编译成二进制代码使其编辑起来更加困难)?

在C / openCL中使用矢量元素

我正在pyopenCL中编写一个openCL内核,我想在其中寻址向量元素。 在简单的C中,我想要的结果是: int i = 0; float *vec = (float*)maalloc(sizeof(float)*4); for (i=0;i<4;i++) { vec[i]=2*i; } 在openCL中,矢量的元素以“pythonic”点语法样式访问。 float4 vec = (float4)(0); for (i=0;i<4,i++) { vec.si = 2*i; /*obviously doesn't work*/ } 因此vec[2]在vec.s2中成为vec.s2 ,因此使用变量访问元素不再简单。 但是如何使用变量访问vector元素呢?

OS X El Capitan上的SDL_image视觉故障

当尝试使用C中的Allegro 5或Python中的PyGame(都使用SDL)加载和显示位图时,它会产生一个小故障(见下面的截图)。 我尝试使用谷歌搜索它,发现它可能与OS X El Capitan的SDL_image不兼容有关,但没有解决方案。 任何人? 目前,我尝试过: 安装SDL_image 1.2.10(最新兼容版本)。 不! 通过自定义公式使用Homebrew安装SDL_image 1.2.10。 也没什么! 在屏幕截图中,那些随机像素应该是三个红砖位图。 顺便说一句,我正在使用这些函数分别加载和绘制位图: tileset[0] = al_load_bitmap(“./data/gfx/bricks.png”); al_draw_bitmap(tileset[0], pos_x, pos_y, 0);

如何将二维数组从C传递给Python

我想从C传递二维数组到python。 我如何使用Py_BuildValue()和PyEval_CallObject() ? 例如,我可以使用以下代码将字符串从C传递给python: pModule = PyImport_ImportModule(“python_code”); pFunc = PyObject_GetAttrString(pModule, “main”); pParam = Py_BuildValue(“(s)”, “HEHEHE”); pResult = PyEval_CallObject(pFunc,pParam); 现在,我想将二维数组和字符串传递给python

Python C绑定错误

我用C代码编写了一个Python API,并将文件保存为foo.c. 码: #include #include static PyObject *foo_add(PyObject *self, PyObject *args) { int a; int b; if (!PyArg_ParseTuple(args, “ii”, &a, &b)) { return NULL; } return Py_BuildValue(“i”, a + b); } static PyMethodDef foo_methods[] = { { “add”, (PyCFunction)foo_add, METH_VARARGS, NULL }, { NULL, NULL, 0, NULL } }; PyMODINIT_FUNC initfoo() { Py_InitModule3(“foo”, foo_methods, “My […]

如何使用正则表达式检测无效的C转义字符串?

我想找到一个正则表达式(正则表达式),它检测你是否在C双引号转义字符串中有一些无效的转义符(在这里你可以找到只引用的双引号)。 我认为有效\\ \n \r \” (测试字符串正在使用”) 对此的部分解决方案是使用(?<!\\)\\[^\"\\nr]但是这个无法检测到错误的转义,例如\\\ 。 这是我用来测试匹配的测试字符串: …\n…\\b…\”…\\\\…\\\E…\…\\\…\\\\\…”…\E… 表达式应该与最后6个块匹配为无效,前4个有效。 问题是我当前版本确实只发现2/5错误。

使用ctypes将c结构传递给函数

我正在尝试查询CUDA设备而不添加pycuda依赖项。 这是我到目前为止所得到的: import ctypes cudart = ctypes.cdll.LoadLibrary(‘libcudart.so’) numDevices = ctypes.c_int() cudart.cudaGetDeviceCount(ctypes.byref(numDevices)) print ‘There are’, numDevices.value, ‘devices.’ for x in xrange(numDevices.value): properties = None # XXX What goes here? cudart.cudaGetDeviceProperties(ctypes.byref(properties), x) print properties 问题是我无法创建一个空结构来传递给cudaGetDeviceProperties()。 我想做这样的事情: properties = cudart.cudaDeviceProp 但是这会抛出这个错误: AttributeError: /usr/local/cuda/lib64/libcudart.so: undefined symbol: cudaDeviceProp 这是相关的CUDA文档 。 (编辑) 感谢@mhawke,我得到了这个工作。 对于其他想要这样做的人,我会为您节省自己打字的工作: class CudaDeviceProp(ctypes.Structure): _fields_ = [ (‘name’, ctypes.c_char […]

创建inheritance外部模块类的“generics”类的最佳方法

在ctypes模块中,底层c_*类型执行C样式截断而不引发任何exception。 例如, c_uint8(0x120)与c_uint8(0x20)相同,与c_uint8(32)相同。 我希望创建inheritancectypes类型的类,如果类型超出其范围,将引发自定义exception。 这是我到目前为止所提出的: from ctypes import * class C_U8(c_uint8): def __init__(self, value): if value 0xFF: raise Exception(“Nice try! Out of range”) 虽然这可以按预期工作,但我很快意识到,对于每个ctypes类型来说,这将成为一个冗余的类。 我想知道是否有更好的方法来执行此操作,例如创建一个从ctypes模块inheritance所有类型的generics类,并相应地检查每个类型?

在python中检测C类型限制(“limits.h”)?

我在python中做了一个小测试程序,在很多情况下测试一些C函数。 这个python程序使用ctypes导入和使用我的C函数。 但我也想测试最小值和最大值的情况(例如limits.h的ULLONG_MAX )。 但由于其中一些限制可能取决于系统,我宁愿避免在我的程序中对其进行硬编码; 我宁愿动态地得到它。 是否有可能在python中获得这些限制值?

Python C模块 – Malloc在特定版本的Python中失败

我正在编写一个Python模块来在O_DIRECT上下文中执行IO。 O_DIRECT的一个限制是你必须读入对应于2.4和2.5内核的4096字节边界的缓冲区,2.6及以上将接受512的任意倍数。 显而易见的内存分配候选是posix_memalign(void **memptr, size_t alignment, size_t size) 在我的代码中,我分配了一个像这样的区域: char *buffer = NULL; int mem_ret = posix_memalign((void**)&buffer, alignment, size); if (!buffer) { PyErr_NoMemory(); return NULL; } /* I do some stuff here */ free(buffer); 当我用python3.2编译和导入模块时,这个(以及未示出的模块的其余部分)工作正常。 当我尝试使用python2.7(我想保持兼容性)时,它会抛出PyErr_NoMemoryexception,而mem_ret == ENOMEM表示它无法分配。 为什么我编译的Python版本会影响posix_memalign的运行方式? 操作系统:Ubuntu 12.04 LTS 编译器:Clang + GCC显示相同的行为 UPDATE 感谢user694733,我现在有了一段代码 然而它工作的事实让我更加困惑: #if PY_MAJOR_VERSION >= 3 char *buffer = […]