小编Mic*_*uer的帖子

使用 binutils/readelf 确定符号地址

我正在做一个项目,我们的验证测试脚本需要在被测试的软件构建中定位符号地址。这可能用于设置断点或从内存中读取静态数据。我所追求的是创建一个包含符号名称、内存中的基址和大小的映射文件。我们的构建输出一个包含我想要的信息的 ELF 文件。我一直在尝试使用readelf、nm 和 objdump工具来尝试获取我需要的符号地址。

我最初尝试过readelf -s file.elf,这似乎访问了一些符号,尤其是那些用汇编程序编写的符号。然而,我想要的许多符号都不在那里——特别是那些源自我们 Ada 代码的符号。

我曾经readelf --debug-dump file.elf转储所有调试信息。从中我确实看到了所有符号,包括那些在 Ada 代码中的符号。但是,格式似乎是 DWARF 格式。有谁知道为什么当我要求它列出符号信息时 readelf 不会输出这些符号?也许只是我缺少一个选项。

现在我可以麻烦地编写一个自定义 DWARF 解析器来获取信息,但是如果我可以使用 Binutils(nm、readelf、objdump)之一来获取它,那么我真的更喜欢标准解决方案。

elf debug-symbols dwarf readelf

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

如何在C#中强制创建Winform句柄

我收到以下运行时错误消息

在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke.

这就是我的想法.我的winform构造函数正在创建一些对象,其中一个对象接收异步TCP/IP数据.总而言之,我有一些事件代理,允许接收网络数据的类从Winform调用例程将数据打印到文本框.这是我可以看到收到的内容.我可以看到数据立即收到.这是在winform构造函数完成之前发生的.

我读了一遍,在创建句柄之前你不能调用winform或winform组件.我怀疑这是我违反的.据说有一个强制这个的功能.我尝试将以下代码添加到我的winform构造函数中,以便在创建接收TCP/IP数据的类之前强制创建.但是,错误仍然存​​在.

InitializeComponent();
this.CreateControl();
this.HistoryBox.CreateControl();
Run Code Online (Sandbox Code Playgroud)

以下是我的winform委托的代码,以防它有用:

    public void Print_Console_Message(string message)
    {
        Console_Output.Enqueue(message);
        this.Invoke(new EventHandler(PrintToConsole));
    }
    private void PrintToConsole(object sender, EventArgs e)
    {
        string message = Console_Output.Dequeue();

        if (message.Length != 0)
        {
            HistoryBox.AppendText(message + "\n" + "\n");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我意识到有一种方法可以检查对象句柄是否已创建并在这种情况下避免调用,但是,我对简单地抑制某些输出不感兴趣.

有谁知道我如何强制句柄或控件创建,以便可以在构造函数完成之前调用委托函数?

.net c# handle invoke

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

从 C++ win32 程序连接到命名管道时遇到问题

我有两个程序在同一台计算机上运行,​​我需要它们进行通信。一种是使用较旧的 windows32 框架用 C++ 编写的现有程序。另一个是使用.NET 框架新编写的C# 应用程序。我的较新的 .NET 应用程序将充当服务器,而较旧的现有应用程序将充当客户端。

我在客户端和服务器上都创建了命名管道。我只是无法让它们连接起来。我怀疑问题只是我没有正确匹配文件名(命名管道在后台使用文件)。

这是 .NET 服务器代码:

    private volatile NamedPipeServerStream pipeServer;
    pipeServer = new NamedPipeServerStream("MyPipe", PipeDirection.InOut);
    pipeServer.WaitForConnection();
Run Code Online (Sandbox Code Playgroud)

以下是较旧的现有 win32 客户端代码:

HANDLE pipe = CreateFile(
    "\\Device\\NamedPipe\\MyPipe",
    GENERIC_READ | GENERIC_WRITE, // only need read access
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL
);
Run Code Online (Sandbox Code Playgroud)

我首先运行服务器代码,它坐在那里等待连接。每次我的句柄都等于INVALID_HANDLE_VALUE

我使用 ProcessExplorer 来查看是否可以找到管道的真实名称。根据 ProcessExplorer,名称为\Device\NamedPipe\MyPipe

我想我正在客户端匹配这个。如果有人可以提出建议,我将不胜感激。谢谢。

.net c# c++ winapi named-pipes

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

标签 统计

.net ×2

c# ×2

c++ ×1

debug-symbols ×1

dwarf ×1

elf ×1

handle ×1

invoke ×1

named-pipes ×1

readelf ×1

winapi ×1