我有一个Linux可执行二进制文件(C或C ++编译)。在某些时候,程序使用时间戳来生成随机数
我需要实现一定数量的随机数,所以我想创建一个脚本(Preferable python)来拦截对系统的调用(AFAIK这叫做“挂钩”)来获取时间戳并返回一个自定义值得我得到我需要的序列。我必须这样做,因为可执行文件不使用整个时间戳,就像timestamp % 10000
这可能吗?如果是这样,怎么样?
答案 0 :(得分:1)
这只能通过在内核中完成。所以你不能使用Python(或任何其他用户空间程序),你必须使用C。
一种选择是在可加载的内核模块中执行此操作。 你可以找到一个例子,例如here
答案 1 :(得分:1)
使用库预加载机制,可以拦截和替换呼叫。对于已与C库动态链接的二进制文件,您可以拦截调用__kernel void search_sort_particles(__global float4* p_pos, __global int* cell_particles, __global int* cell_number_of_particles, float4 lb, int4 c_n, float c_size)
{
int i = get_global_id(0);
int max_cell_particles = 20;
int4 c_pos; // determine cell position
c_pos.x = floor((((p_pos[i].x - lb.x) / c_size)));
c_pos.y = floor((((p_pos[i].y - lb.y) / c_size)));
c_pos.z = floor((((p_pos[i].z - lb.z) / c_size)));
int c_idx = c_pos.x + (c_n.x * c_pos.y) + (c_n.x * c_n.y * c_pos.z); // determine cell index
// store particle index in cell
cell_particles[c_idx*max_cell_particles + cell_number_of_particles[c_idx]] = i;
cell_number_of_particles[c_idx]++;
}
等,以模拟不同的时间。
开源" libfaketime"项目已经实现了伪造时间:https://github.com/wolfcw/libfaketime