小编har*_*per的帖子

UDP打孔超时

我需要实现UDP协议.PC必须在专用的UDP端口侦听传入的数据包.它还发送数据包(答案).该应用程序在Windows XP,7,8,....上运行

Windows防火墙阻止传入的数据包.这可以通过UDP打孔来规避.所以我必须发送一些不应该受伤的东西.但我想尽可能少打扰.

  • 如何在防火墙关闭之前确定超时?
  • 我可以检测到防火墙已关闭防火墙,以便我必须重新发送到打开数据包吗?当然,当防火墙关闭时我不会收到任何东西,但这可能还有其他原因.

windows-firewall hole-punching

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

如何签名可执行文件以在WEC2013上执行

对于启用了安全性加载程序的WEC2013平台,我创建了一个自签名证书。证书具有以下属性

Key Usage: Digital Signature (80)
Enhanced Key Usage: Code Signing (1.3.6.1.5.5.7.3.3)
Run Code Online (Sandbox Code Playgroud)

证书已导出到文件ciroots.p7b和PFX文件。该ciroots.p7b描述已被添加到WEC2013平台Files文件夹位置。使用该平台构建的OS设计包括该文件的副本ciroots.p7b

PFX已用于使用以下命令对文件进行签名

signtool -f /path/to/PFX -p ThePassword example.exe
Run Code Online (Sandbox Code Playgroud)

这与描述相符。signtool命令修改了.EXE。生成的文件比原始文件大1kB。

在目标上启动OS设计并将签名的.EXE复制到目标后,应该可以执行该程序。但是开始失败并显示以下消息:

无法执行example.EXE

在WEC2013文档中描述的步骤中我错过了什么?如何准备可执行文件以在启用LVMOD的OS设计上运行?

尽管在签名过程中没有错误消息,但我可能错过了一些重要的属性。使用LVMOD进行代码签名的证书有什么要求?

编辑: 对应于丹尼尔斯评论,我使用了signtool来验证签名文件。该证书已安装在“受信任”存储区中的PC上(系统询问我是否要信任该证书)。使用SignTool验证文件签名时运行signtool,结果如下:

 C:\Test>signtool verify  example.exe 
 SignTool Error: A certificate chain processed, but terminated in a root
         certificate which is not trusted by the trust provider.

 Number of errors: 1

 C:\Test>signtool verify /pa example.exe
 Successfully verified: example.exe

 C:\Test>
Run Code Online (Sandbox Code Playgroud)

第一次调用失败,如signtool文档中所述:

如果前面的示例失败,则可能是签名使用了代码签名证书。SignTool默认使用Windows驱动程序策略进行验证。

certificate x509certificate windows-embedded-compact

6
推荐指数
0
解决办法
103
查看次数

在Windows 7上发送UDP广播

我有一台PC,有两个网卡连接到不同的网络(多宿主网络设置).我想在两个网络上发送UDP广播帧.帧的发送方IP地址必须是适配器的IP地址,用于发送帧.目标地址应为LIMITED BROADCAST地址.

客户应用程序不应以管理权限运行(UAC不可加入).

如何将这些UDP帧发送到LIMITED BROADCAST地址(255.255.255.255)?如何将这些帧发送到NETWORK BROADCAST地址(xyz255)?

我知道如何使用原始套接字执行此操作.但原始套接字只能与管理权限一起使用.

winsock windows-7

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

Eclipse CDT(CCS)转到函数的定义

当我在Windows XP上使用Eclipse/CCS(CDT)时,操作"Open Declaration"(F3)和"Open Definition"(Ctrl-F3)按预期运行.

切换到Windows 7后,我仍然可以跳转到声明.但Eclipse完全忽略了Ctrl-F3相应的菜单命令.我检查了所有首选项,但找不到两个安装之间的任何差异.

我认为项目属性在这里并不重要,因为当我在Windows XP启动时访问项目时,Open Definition仍然有效.

如何再次使用新的Eclipse安装获得这个有价值的功能?

eclipse eclipse-cdt

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

如何隐式转换整数类型?

以下代码在MISRA检查中失败.具体的错误消息是:

(MISRA-C:2004 10.1/R)如果不是转换为相同签名的更宽整数类型,则整数类型表达式的值不应隐式转换为不同的基础类型.

typedef enum _MyEnum { One, Two } MyEnum;
MyEnum MyVariable;

int foo(void)
{
    int result = 1;

    if (One == MyVariable)  // fails here with MISRA-C:2004 10.1/R
    {
        result = 2;
    }    
    return result;
}
Run Code Online (Sandbox Code Playgroud)
  • 为什么逻辑表达式被转换?
  • 什么转换在这里?
  • 为什么代码通过MISRA检查,当我换OneMyVariable

编辑:编译器是TI"MSP430 C/C++编译器v4.0.0",包含MISRA规则检查.

c misra

5
推荐指数
2
解决办法
1148
查看次数

删除 objcopy 符号名称中的路径

我需要在我的项目中包含一个二进制程序。我使用 objcopy 从二进制文件创建目标文件。目标文件可以链接到我的程序中。objcopy 创建适当的符号来访问二进制数据。

例子

objcopy -I binary -O elf32-littlearm --binary-architecture arm D:\Src\data.jpg data.o
Run Code Online (Sandbox Code Playgroud)

生成的符号是:

_binary_D__Src_data_jpg_end
_binary_D__Src_data_jpg_size
_binary_D__Src_data_jpg_start
Run Code Online (Sandbox Code Playgroud)

问题在于符号包含二进制文件的路径D__Src_。当包含来自不同位置的二进制文件时,这可能会有所帮助。但令我困扰的是,当我从不同位置获取文件时,符号会发生变化。由于这将在多个构建站上运行,因此无法使用 --redefine-sym 选项删除该路径。

如何去掉符号名称中的路径?

binutils

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

配置 VSCode 包含路径

我使用 VSCode 编辑 Xilinx SDK 文件。VSCode 发出“问题”,其中包括找不到路径。

我使用灯泡“显示修复”:

添加到“includePath”:D:/Other/Xilinx/SDK/2017.4/gnu/aarch32/nt/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/6.2.1/include

但 VSCode 仍然抱怨缺少包含路径,尽管每个路径都Add to "includePath"在项目 .vscode 文件夹中添加了“c_cpp_properties.json”的正确路径。

include 配置有什么问题?

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/standalone_bsp_0/ps7_cortexa9_0/include",
                "D:/Other/Xilinx/SDK/2017.4/gnu/aarch32/nt/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/6.2.1/include",
                "D:/Other/Xilinx/SDK/2017.4/gnu/aarch32/nt/gcc-arm-none-eabi/lib/gcc/arm-none-eabi/6.2.1/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "8.1",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}
Run Code Online (Sandbox Code Playgroud)

这是 VSCode 抱怨的一行:

#include <stdint.h>
Run Code Online (Sandbox Code Playgroud)

编辑:

每次接受“修复”都会导致“includePath”中出现一条具有相同路径的附加行,但这并不能解决问题。所以你在c_cpp_properties.json转储中看到的内容是由“修复”引起的。

visual-studio-code

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

错误LNK2001:未解析的外部符号

我正在将我的项目从vc6转换为VS 2010.当我编译我的项目时,我得到的错误如下所示.lib输入.我在Linker-> Input-> Additional Dependencies中添加了所有这些lib,还在Link-> General-> Additional Library目录中提供了这些.lib文件的路径.任何提示都会非常有帮助.

lb0.lib(ob0.obj) :error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb1.lib(ob1.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb2.lib(ob2.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb3.lib(ob3.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb3.lib(ob4.obj) : error LNK2001: unresolved external symbol "void __stdcall SetLastExP(class ExceptionClass *)" (?SetLastExP@@YGXPAVExceptionClass@@@Z)
lb3.lib(ob5.obj) : error LNK2001: unresolved external symbol "void …
Run Code Online (Sandbox Code Playgroud)

visual-c++-6 visual-studio-2010 visual-c++

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

如何设置2字节的wchar_t输出?

GCC默认使用4字节的wchar_t.我可以设置选项wchar_t,在每个wchar_t中获取2个字节-fshort-wchar.但是当我将编译器选项设置为我的源文件时,我得到了着名的警告消息

foo.o使用2字节的wchar_t但输出是使用4字节的wchar_t; 跨对象使用wchar_t值可能会失败

因为我真的想要2字节的wchar_t,我也希望输出使用这个变种.是否有任何链接器选项告诉它我想要什么?

编辑

此警告不会禁止链接器生成有效输出.但是,数十个虚假警告涵盖了其他信息.

gcc ld binutils eabi

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

自动变量如何变化?

我知道volatile在文件范围定义的变量.不允许编译器对这些变量进行假设.它们几乎可以随时更改,编译时不能优化变量的读取.

现在我找到了这段代码

BOOL InstallHandler()
{
    volatile BOOL b_bulk_erase = FALSE;
    volatile BOOL b_test_read_write = FALSE;
    volatile BOOL b_continue = TRUE;
    ...
    if (b_test_read_write)
    {
        read();
        write();
    }
}
Run Code Online (Sandbox Code Playgroud)

如何volatile对应于堆栈的变量,即由一个线程拥有?

编辑:

由一个线程拥有,我想表达该变量未公开.地址不给其他任何东西.它不被任何其他线程使用.

c

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