小编Lud*_*udo的帖子

来自open()的钩子的分段错误

我试图在系统函数上创建一个钩子open().我按照以下几点做了这个.

我创建了一个包装库,其中包含以下内容:

extern int mocked_open(const char* fn, int flags, va_list args);

int open(const char* fn, int flags, ...)
{
    int r = -1;
    va_list args;

    va_start(args, flags);
    r = mocked_open(fn, flags, args);
    va_end(args);

    return r;
}
Run Code Online (Sandbox Code Playgroud)

我将其编译为libwrapper.so,我使用LD_PRELOAD加载.

执行mocked_open()如下(我使用CPPUtest框架):

int mocked_open(const char* fn, int flags, va_list args)
{
    if (strncmp(fn, test_device_id, 11) == 0)
    {
        return mock().actualCall("open").returnValue().getIntValue();
    }
    else
    {
        int r = -1;
        int (*my_open)(const char*, int, ...);
        void* fptr = dlsym(RTLD_NEXT, "open");
        memcpy(&my_open, &fptr, sizeof(my_open)); …
Run Code Online (Sandbox Code Playgroud)

c linux gcc

6
推荐指数
2
解决办法
814
查看次数

如何实现固定大小的哈希图?

我想实现一个hashmap,但不允许扩展。因为我知道我最多需要存储N元素,所以我可以N为哈希表的每个存储桶预先分配一个包含元素的数组,这样我仍然可以N在最坏的情况下存储元素,即所有键都在同一个存储桶上散列。但是我需要存储的元素相当大,所以对于大的来说,N这是非常低效的内存使用。

是否可以使用固定数量的内存(例如通过实现智能散列函数)有效地(就内存而言)实现散列图?

(PS:键是一个无符号的 32 位整数,我对键没有先验知识,只是我将收到的键值在范围的一个相当小的子集中,并且这个子集在范围内移动得非常缓慢.)


我现在有一个实现,其中我有两个 length 数组N,一个包含元素,另一个包含对应i于两个数组中位置元素的键。我使用模运算作为散列函数来确定元素应该插入/存在的位置,并使用线性探针在发生碰撞时找到最近的空点。我认为这是 O(N) 的复杂性,我认为这对于我期望的数据量来说会相当快。我问了这个问题,看看是否可以做得更好。

c hash hashmap

2
推荐指数
1
解决办法
2578
查看次数

标签 统计

c ×2

gcc ×1

hash ×1

hashmap ×1

linux ×1