小编yug*_*ugr的帖子

合并Python词典

我试图合并以下python词典如下:

dict1= {'paul':100, 'john':80, 'ted':34, 'herve':10}
dict2 = {'paul':'a', 'john':'b', 'ted':'c', 'peter':'d'}

output = {'paul':[100,'a'],
          'john':[80, 'b'],
          'ted':[34,'c'],
          'peter':[None, 'd'],
          'herve':[10, None]}
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法来做到这一点?

python merge dictionary list data-structures

23
推荐指数
3
解决办法
2万
查看次数

HTML Sanitizer for .NET

我正在开始一个使用asp.net mvc公开面对的项目.我知道那里有大约十亿个php,python和ruby html清洁剂,但有没有人对.net中的任何好东西都有一些指示?你对那里的经历有什么经验?我知道stackoverflow是一个在asp.net中完成的站点,允许自由格式HTML,它使用什么?

.net asp.net html-sanitizing

20
推荐指数
2
解决办法
2万
查看次数

-fsanitize在GCC-6.1中不使用金链接器

更新(2016年9月30日)

Uccntu构建的gcc-6.2((Ubuntu 6.2.0-3ubuntu11~16.04)6.2.0 20160901)不再存在这个问题.


我使用了Ubuntu建立GCC-6.1的[1]((Ubuntu的6.1.1-3ubuntu11〜14.04.1)6.1.1 20160511),GNU binutils的2.24,和libstdc ++与GLIBCXX_3.4.22支持.即使在简单的"hello world"程序中,指定清洁剂也不会强制使用黄金链接器.

main.cpp中

#include <iostream>
int main() {
    std::cout << "Hello, world!\n";
}
Run Code Online (Sandbox Code Playgroud)

编译和链接

g++ -fsanitize=address -c -o main main.cpp
g++ -fsanitize=address -o main main.o
Run Code Online (Sandbox Code Playgroud)

给出了错误

/usr/bin/ld: unrecognized option '--push-state'
/usr/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这表示该-fsanitize选项未选择黄金链接器.当然,简单的解决方法是-fuse-ld=gold在链接期间使用,但是在使用消毒剂时,gcc的先前版本不需要这样做.例如,这个代码在gcc-5.3和4.9下完全正常(两者都是Ubuntu版本).是否有其他人在使用非Ubuntu构建的gcc-6.1时遇到此问题?Ubuntu构建是否破损?


[1]使用以下标志构建(gcc-5.3和gcc-4.9的构建只有名称和后缀的差异)

--with-pkgversion='Ubuntu 6.1.1-3ubuntu11~14.04.1'
--with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs
--enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++
--prefix=/usr
--program-suffix=-6
--enable-shared
--enable-linker-build-id
--libexecdir=/usr/lib
--without-included-gettext
--enable-threads=posix
--libdir=/usr/lib
--enable-nls
--with-sysroot=/
--enable-clocale=gnu
--enable-libstdcxx-debug
--enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=gcc4-compatible
--disable-libstdcxx-dual-abi
--enable-gnu-unique-object
--disable-vtable-verify
--enable-libmpx …
Run Code Online (Sandbox Code Playgroud)

c++ gcc ld gold-linker address-sanitizer

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

如何解释ELF可执行文件中的动态符号表?

我正在寻找解释.dynsymELF可执行文件的动态符号表().我可以.symtab使用该value属性成功解释符号表(每个符号16个字节),以表示符号和name属性的地址,以表示.strtab段中字符串开头的偏移量.但是我无法.dynsym使用相同的方法解释动态符号表().我用阿里的博客[1]作为参考.

我查看了Ali的另一个博客[2],但我不明白如何使用哈希表来解释动态符号表.显然,它与符号表使用的映射不同.我该如何解释动态符号表(.dynsym)?

另外,我正在查看的ELF可执行文件有两个部分,即.hash.gnu.hash.我在哪个部分引用哈希值?

[1] http://blogs.oracle.com/ali/entry/inside_elf_symbol_tables
[2] http://blogs.oracle.com/ali/entry/gnu_hash_elf_sections

dynamic elf symbol-table

11
推荐指数
2
解决办法
8056
查看次数

Clang的UBSan和功能指针:这是非法的吗?

我试图通过函数指针表调用一些C++函数,该表从共享对象导出为C符号.该代码实际上正在工作,但Clang的未定义行为清理程序(= UBSan)看到我所做的调用是非法的,如下所示:

==11410==WARNING: Trying to symbolize code, but external symbolizer is not initialized!
path/to/HelloWorld.cpp:25:13: runtime error: call to function (unknown) through pointer to incorrect function type 'foo::CBar &(*)()'
(./libFoo.so+0x20af0): note: (unknown) defined here
Run Code Online (Sandbox Code Playgroud)

由于Clang的未定义行为清理程序,间接调用函数通过函数指针返回C++标准类对象的引用是合法的,但对于用户定义的类是非法的.有人可以告诉我它有什么问题吗?

我一直在尝试使用Clang-llvm 3.4-1ubuntu3CMake 2.8.12.2Ubuntu 14.04上构建项目.要重现此现象,请将以下5个文件放在同一目录中并调用build.sh.它将创建一个makefile并构建项目,并运行可执行文件.

foo.h中

#ifndef FOO_H
#define FOO_H

#include <string>

//
#define EXPORT __attribute__ ((visibility ("default")))

namespace foo {
    class CBar
    {
        // empty
    };

    class CFoo
    {
    public:
        static CBar& GetUdClass();
        static std::string& GetStdString();
    }; …
Run Code Online (Sandbox Code Playgroud)

c++ linux shared-libraries clang ubsan

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

在嵌入式目标上动态加载代码

我有一个在裸机目标上运行的应用程序,具有以下结构

  • main.c中
  • service.c/.H

它编译成ELF可执行文件(system.elf)使用标准gcc -c,ld序列.我使用链接器生成一个显示所有符号地址的映射文件.

现在,在不重新刷新系统的情况下,我需要使用自定义运行时加载器添加额外的功能.请记住,这是一款没有操作系统的裸机.

我想

  • 编译extra.c,它使用service.h中定义的API(并以某种方式链接现有的service.o/system.elf)
  • 在运行时将生成的可执行文件复制到我的SDRAM 并跳转到它
  • 加载的代码应该能够运行并按预期访问service.c中的导出符号

我以为我能够重用map文件来链接extra.o对system.elf但这不起作用:

ld -o extraExe extra.o system.map
Run Code Online (Sandbox Code Playgroud)

gcc或ld是否有某种模式来进行这种后期链接过程?如果没有,我如何实现上面概述的动态代码加载?

embedded gcc ld

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

如何从JS中删除字符串中的坏字符?

我的JS使用"stringify()"将一些字符串数据保存到JSON,但是观察输出的JSON字符串,我看到很多奇怪的字符(来自键空间),例如NULL和其他坏字符.现在我没有这些"坏"字符的列表,那么如何从字符串数据中删除它们呢?

javascript string json sanitization

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

基于unix的系统中的延迟负载等效

什么是基于unix的系统中的延迟负载等价物.

我有一个代码foo.cpp,在用gcc编译时,我将它链接到共享对象(共有三个.so文件.).每个.so文件都有不同的选项.

./foo -v需要libversion.so ./foo -update需求libupdate.so

我需要这些库的符号只能在运行时解析.

./foo -v 即使libupdate.so库不存在也不应该破坏.

它在Windows中使用延迟加载选项(在dll的属性中).在Unix系统中它的等价物是什么.

威尔-lazy选项确实在UNIX一样吗?如果是这样,在哪里包含此选项:在makefile中还是在链接器ld中?

c unix linker shared object

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

python 扩展上的地址消毒剂

我正在尝试使用 Address Sanitizer 编译一个 python 扩展。当我加载扩展时,我得到

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from extension import package
  File "/tmp/python_test/extension/package.py", line 28, in <module>
    from extension._ext import *
ImportError: /tmp/python_test/extension/_ext.so: undefined symbol: __asan_version_mismatch_check_v8
Run Code Online (Sandbox Code Playgroud)

编译器调用是

clang -g -o _ext.so code.ll -fsanitize=address -lrt -lpthread -ldl -lstdc++ -lm -fPIC -shared
Run Code Online (Sandbox Code Playgroud)

因此,它不会从 asan 正确加载符号。我试过使用-static-libsan,但结果是一样的。

我已经看到有些人习惯LD_PRELOAD将 Asan 放入共享对象中,但是,似乎libasan.so我系统上的 Address Sanitizer 来自不同版本的 Address Sanitizer(从 Debian 的 libasan3 包安装,而我从 deb http://apt .llvm.org/stretch/ llvm-toolchain-stretch-8 主)。

那么,如何使 Address Sanitizer 与共享对象库一起使用?要么,我需要正确的版本 …

python clang address-sanitizer

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

C++20 中排序类型的隐含含义

operator <=>C++20 允许用户在定义:std::partial_orderingstd::weak_ordering时指定不同的返回类型std::strong_ordering。指定它们是否意味着相应的类承诺遵守某些排序公理?例如,对于部分排序,这些将是非自反性、不对称性和传递性

我在 C++20 标准中找不到任何提及这一点的内容。

c++ language-lawyer spaceship-operator c++20

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