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)

但是当我同时运行它们时我仍然得到不同的输出,我能解释一下为什么会这样

【问题讨论】:

投票结束是一个错字。 &amp;%. 【参考方案1】:

在您的 Python 版本中,您使用 0xf 修改而不是按位进行 &amp; 操作。换句话说,您将结果修改为 15 而不是 16。如果我将 Python 版本切换为使用 &amp; 而不是 %,我会在我的机器上得到相同的结果。

【讨论】:

以上是关于Python ctypes time(0) 和 C time(0)的主要内容,如果未能解决你的问题,请参考以下文章

python3使用ctypes在windows中访问C和C++动态链接库函数示例

Python 外部函数调用库ctypes简介

如何使用 ctypes 将 Python 列表转换为 C 数组?

Python 3.x ctype c_wchar_p 和 c_char_p 返回状态不同于 ctypes doc

使用Python中的C:如何创建ctypes包装器

python--ctypes模块:调用C函数