Python ctypes time(0) 和 C time(0)
Posted
技术标签:
【中文标题】Python ctypes time(0) 和 C time(0)【英文标题】:Python ctypes time(0) and C time(0) 【发布时间】:2022-01-14 21:59:45 【问题描述】:所以我参加了 2019 picoCTF 二进制挑战种子-sPRiNG,我得到了这个write up 使用此代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main ()
int i;
srand(time(0));
for (i = 0; i < 30; i++)
printf("%d\n", rand() & 0xf);
return 0;
所以我想在 python 中实现相同的功能。起初我使用了 random 模块,但意识到 C rand 和 python 在它们的实现中相距甚远,所以我决定使用 ctypes:
#!/usr/bin/python3
from ctypes import CDLL
libc = CDLL("libc.so.6")
libc.srand(libc.time(0))
for i in range(30):
print(libc.rand() % 0xf)
但是当我同时运行它们时我仍然得到不同的输出,我能解释一下为什么会这样
【问题讨论】:
投票结束是一个错字。&
与 %
.
【参考方案1】:
在您的 Python 版本中,您使用 0xf
修改而不是按位进行 &
操作。换句话说,您将结果修改为 15 而不是 16。如果我将 Python 版本切换为使用 &
而不是 %
,我会在我的机器上得到相同的结果。
【讨论】:
以上是关于Python ctypes time(0) 和 C time(0)的主要内容,如果未能解决你的问题,请参考以下文章
python3使用ctypes在windows中访问C和C++动态链接库函数示例
如何使用 ctypes 将 Python 列表转换为 C 数组?