我需要实现UDP协议.PC必须在专用的UDP端口侦听传入的数据包.它还发送数据包(答案).该应用程序在Windows XP,7,8,....上运行
Windows防火墙阻止传入的数据包.这可以通过UDP打孔来规避.所以我必须发送一些不应该受伤的东西.但我想尽可能少打扰.
对于启用了安全性加载程序的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驱动程序策略进行验证。
我有一台PC,有两个网卡连接到不同的网络(多宿主网络设置).我想在两个网络上发送UDP广播帧.帧的发送方IP地址必须是适配器的IP地址,用于发送帧.目标地址应为LIMITED BROADCAST地址.
客户应用程序不应以管理权限运行(UAC不可加入).
如何将这些UDP帧发送到LIMITED BROADCAST地址(255.255.255.255)?如何将这些帧发送到NETWORK BROADCAST地址(xyz255)?
我知道如何使用原始套接字执行此操作.但原始套接字只能与管理权限一起使用.
当我在Windows XP上使用Eclipse/CCS(CDT)时,操作"Open Declaration"(F3)和"Open Definition"(Ctrl-F3)按预期运行.
切换到Windows 7后,我仍然可以跳转到声明.但Eclipse完全忽略了Ctrl-F3相应的菜单命令.我检查了所有首选项,但找不到两个安装之间的任何差异.
我认为项目属性在这里并不重要,因为当我在Windows XP启动时访问项目时,Open Definition仍然有效.
如何再次使用新的Eclipse安装获得这个有价值的功能?
以下代码在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)
One和MyVariable?编辑:编译器是TI"MSP430 C/C++编译器v4.0.0",包含MISRA规则检查.
我需要在我的项目中包含一个二进制程序。我使用 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 选项删除该路径。
如何去掉符号名称中的路径?
我使用 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转储中看到的内容是由“修复”引起的。
我正在将我的项目从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) GCC默认使用4字节的wchar_t.我可以设置选项wchar_t,在每个wchar_t中获取2个字节-fshort-wchar.但是当我将编译器选项设置为我的源文件时,我得到了着名的警告消息
foo.o使用2字节的wchar_t但输出是使用4字节的wchar_t; 跨对象使用wchar_t值可能会失败
因为我真的想要2字节的wchar_t,我也希望输出使用这个变种.是否有任何链接器选项告诉它我想要什么?
编辑
此警告不会禁止链接器生成有效输出.但是,数十个虚假警告涵盖了其他信息.
我知道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对应于堆栈的变量,即由一个线程拥有?
编辑:
由一个线程拥有,我想表达该变量未公开.地址不给其他任何东西.它不被任何其他线程使用.
binutils ×2
c ×2
certificate ×1
eabi ×1
eclipse ×1
eclipse-cdt ×1
gcc ×1
ld ×1
misra ×1
visual-c++ ×1
visual-c++-6 ×1
windows-7 ×1
winsock ×1