我正在尝试使用原始套接字构建以太网网络。我不能使用 TCP/IP、UDP 或任何其他协议。
这是因为它将与非常简单的硬件进行通信,这些硬件没有资源来处理所有不同的协议层。我的网络将由一台主机组成,通过以太网交换机与多个硬件进行通信。在这一点上,我基本上只想向每个硬件发送简单的数据包,并建立一个我可以扩展的简单服务器。我的系统运行的是 Linux,服务器需要用 C 或 C++ 编写。
我一直在寻找有关如何使用原始套接字的信息,但每个人都总是说不要使用它们并且没有提供任何信息。我有很强的编程背景,但没有网络经验。任何人都可以提供有关如何入门或在哪里可以找到相关教程的任何信息吗?
这是设置:我正在使用 LLVM,并且我有一个分析过程,需要使分析的一些结果可供以后使用。这些结果需要在我生成的最终 .s 文件(ARM 架构)中可见。然后我在 .s 文件上运行一些脚本,这些脚本使用这些结果做进一步分析,但也依赖于生成的 ASM 的实际结构(否则我只会使用更多的 LLVM 传递)。
最初我认为元数据就是我想要的,我创建了一些简单的测试函数来为我关心的每条指令插入一些元数据。但我不知道如何使这个元数据反映在最终的 .s 文件中。更糟糕的是,我无法弄清楚如何使元数据字符串成为我真正想要的。您将在下面看到的“5”永远不会输出。相反,我在输出中看到 46 或 47。
void addMetadata(Instruction& I) {
LLVMContext& C = I.getContext();
MDNode* N = MDNode::get(C, MDString::get(C, "5"));
I.setMetadata("alias_set", N);
std::cerr << "Instruction" << std::endl;
I.dump();
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
Instruction
%30 = load i32* %29, align 4, !dbg !67, !alias_set !46
Run Code Online (Sandbox Code Playgroud)
我也听说内联汇编可能会起作用,但我不知道这是否允许我在特定的 IR 指令之前插入注释或标签。如果 IR 被重新排序,那么无论它走到哪里,该标签或评论都需要跟随它。基本上,我只想在 .s 文件中看到一个标签或评论,其中包含一些我想要的少量信息。有谁知道这是怎么做到的吗?谢谢!