小编Jas*_*n R的帖子

GNU ld 的 --audit 标志有什么作用?

我有一个应用程序,我想使用rtld-auditLinux 提供的接口来挂钩共享库加载过程。如果我在运行程序时使用LD_AUDIT环境变量告诉动态链接器使用我的审计库audit.so,这将非常有效。

但是,我想让它更加自动化,不需要特殊的环境设置。GNUld提供了一个--audit标志,描述如下:

--audit AUDITLIB
Run Code Online (Sandbox Code Playgroud)

将 AUDITLIB 添加到动态部分的“DT_AUDIT”条目。不会检查 AUDITLIB 是否存在,也不会使用库中指定的 DT_SONAME。如果多次指定,“DT_AUDIT”将包含要使用的以冒号分隔的审计接口列表。如果链接器在搜索共享库时发现带有审计条目的对象,它将在输出文件中添加相应的“DT_DEPAUDIT”条目。此选项仅在支持 rtld-audit 接口的 ELF 平台上有意义。

这向我表明,如果我使用 链接我的程序--audit audit.so,那么它应该将我的审计库与该程序相关联。我希望在程序运行时加载审计库。

果然,使用readelf,我可以验证使用这个标志会导致audit.so在 ELF 标头中注册为审计库。但是,如果我在没有LD_AUDIT设置的情况下运行我的程序,则永远不会调用审计库。似乎我必须设置LD_AUDIT=audit.so才能获得我想要的行为。

这就引出了一个问题:--audit旗帜实际上有什么作用?上面手册页引用之外的任何文档似乎都非常稀缺。我不清楚 Linux 动态加载器甚至使用DT_AUDITELF 标头中的字段。这是故意的吗?

linux glibc shared-libraries elf ld

4
推荐指数
1
解决办法
619
查看次数

如何在Python中没有is-a关系的情况下共享属性?

我有许多Python类型来描述层次结构,因为它们在属性方面越来越具体.这是一个例子,而不是试图用文字描述它:

class A:
    @property
    def prop1(self):
        return self._prop1

class B:
    @property
    def prop1(self):
        return self._prop1

    @property
    def prop2(self):
        return self._prop2

class C:
    @property
    def prop1(self):
        return self._prop1

    @property
    def prop2(self):
        return self._prop2

    @property
    def prop3(self):
        return self._prop3
Run Code Online (Sandbox Code Playgroud)

因此,当您进入类列表时,B具有所有属性,A然后是一些额外的属性.C具有所有属性,B然后是一些额外的属性,依此类推.如果可能的话,我想尽量减少上述定义的重复.

一个显而易见的解决方案是使用继承,创建B子类A等等.但是,这些类型的语义不遵循is-a关系; 我不想isinstance(bObject, A)成为True.在Python中是否有另一种方法可以直接允许在不使用子类的情况下共享属性?

python properties

3
推荐指数
1
解决办法
82
查看次数

如何将C++参数包映射到std :: pair对象序列?

我有一个可变参数模板函数foo():

template <typename... Args>
void foo(Args &&... args);
Run Code Online (Sandbox Code Playgroud)

此函数旨在使用的所有参数调用size_t.我可以使用一些元编程来强制执行.我需要一次获取两个参数的结果列表,并将它们放入容器中std::pair<size_t, size_t>.从概念上讲,类似于:

std::vector<std::pair<size_t, size_t> > = { 
    std::make_pair(args[0], args[1]), 
    std::make_pair(args[2], args[3]), ...
};
Run Code Online (Sandbox Code Playgroud)

有一种直截了当的方法吗?我知道通过包扩展,我可以将参数放入一个扁平的容器中,但是有没有办法将它们两个一起分组到std::pair对象中?

c++ c++11

3
推荐指数
1
解决办法
959
查看次数

如何包装std :: function并轻松访问其返回值和参数类型?

我正在尝试做一些简化的事情:

#include <functional>
#include <initializer_list>
#include <vector>

template <typename Ret, typename... Args>
struct func_wrapper
{
public:
    using Func = std::function<Ret(Args...)>;

    Ret operator()(Args && ...args)
    {
        return _impl(std::forward<Args>(args)...);
    }

    void another_function(int another_arg, Args && ...args) { }
    /// and so on

private:
   Func _impl;
};

func_wrapper<void(int, float)> f;


Run Code Online (Sandbox Code Playgroud)

基本上,我想为包装一个类型,std::function并为我的应用程序添加一些其他功能。在我的类型内部,我希望能够在类接口中自由使用返回类型Ret和参数参数包Args。但是,当我尝试使用gcc 8.3编译以上代码时,出现错误

<source>: In instantiation of 'struct func_wrapper<void(int, float)>':
<source>:20:32:   required from here
<source>:9:45: error: function returning a function
     using Func = std::function<Ret(Args...)>;
                                             ^
<source>:11:9: …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates template-argument-deduction c++14

3
推荐指数
1
解决办法
72
查看次数

我可以使用哪些正则表达式来修复这种非标准的Fortran语法?

我有一堆使用非标准结构表示法的Fortran 77文件(此处描述):

STRUCTURE /item/
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END STRUCTURE
Run Code Online (Sandbox Code Playgroud)

这显然是一些旧编译器使用的语法,但后来在Fortran 90中标准化为以下内容:

TYPE item
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END TYPE
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用sed或一些其他适当的工具来自动处理我的源文件,找到旧语法的所有用法,并修补它们以使用更新的语法(即将"结构"的所有实例更改为"键入"并删除斜杠).我确信我可以构建一些正则表达式来完成这项工作,但是我对这门艺术的熟练程度还不够.

另外,与记录符号有类似的不兼容,也在链接中描述:

RECORD /item/ pear, store_catalog(100)
Run Code Online (Sandbox Code Playgroud)

变为:

TYPE(item) pear, store_catalog(100)
Run Code Online (Sandbox Code Playgroud)

我假设也可以使用类似的技术来修复这些实例.

regex fortran sed

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

如何设置std :: net :: UdpSocket的超时?

std :: old_io :: net :: udp :: UdpSocket已被std :: net :: UdpSocket取代,并且fn set_timeout(&mut self, timeout_ms: Option<u64>)没有等价物.

任何想法如何实现?

sockets rust

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

如何更改QDockWidgetArea中所有QDockWidgets的宽度/高度?

我有一个PyQt 4应用程序,它有一个QMainWindow,左侧和底部停靠区域都有停靠的QDockWidgets.我目前有两个小部件停靠在左侧,2个停靠在底部.我试图找出如何以编程方式移动中央小部件和停靠区域之间的边界,有效地改变停靠区域的宽度(在左侧或右侧区域的情况下)或高度(对于顶部和底部停靠区域) ).

我可以用鼠标手动完成; 当我将光标移动到中央小部件和停靠区域之间的边界上时,我得到一个可以用来拉伸停靠区域的调整大小手柄.我还没有找到一个允许我从我的程序中执行此操作的界面.我已经尝试手动调整QDockWidget对象本身(文档建议反对)和它们包装的小部件(应该可以工作),但这似乎不起作用.有任何想法吗?

具体来说,这种方法不起作用:

dock1.resize(QSize(width, height))
dock2.resize(QSize(width, height))
dock3.resize(QSize(width, height))
Run Code Online (Sandbox Code Playgroud)

这也不是:

dock1.widget().resize(QSize(width, height))
dock2.widget().resize(QSize(width, height))
dock3.widget().resize(QSize(width, height))
Run Code Online (Sandbox Code Playgroud)

python qt4 pyqt4

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

SymPy可以理解由求和指数索引的变量吗?

我有一个形式的等式(在LaTeX语法中):

\sum_{k=0}^{K-1} a_k = 0
Run Code Online (Sandbox Code Playgroud)

a_k是一个"下标k",我正在建立一个线性方程组的变量列表之一.我希望能够尽可能紧凑地将这个方程表达给SymPy.似乎我想用它的Sum()函数来表达求和,但我不知道如何告诉它on term k in the sum, a_k refers to the k-th symbol.

这是可能的,例如,如果我设置这样的符号列表?

a = [sympy.symbols('a' + str(i)) for i in xrange(K)]
Run Code Online (Sandbox Code Playgroud)

sympy

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