c# 从转储到文件的 GNU objcopy 进程捕获原始数据

c# capture raw data from a GNU objcopy process, that dumps to a file

我需要在 C# 内存中处理 OBJCOPY 实用程序提供的一些转储。

在命令提示符下使用时,我是这样使用的:

objcopy myprogram.elf --dump-section .text=text_section.txt

这就是我将 .text 部分的 RAW 内容获取到文件中的方法。

在 C# 中,我编写了一个小进程包装器来启动外部程序

public static int RunProcess(string cmd, string args, out string output)
{
    Process proc = new Process();

    try
    {

        proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        proc.StartInfo.FileName = cmd;

        proc.StartInfo.Arguments = args;
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.RedirectStandardError = true;

        proc.Start();
        output = proc.StandardOutput.ReadToEnd();

        proc.WaitForExit(); // wait here, blocking

    }
    catch (Exception ex)
    {
        output = cmd + ": " + ex.Message;
        return 1;
    }

    if (proc.ExitCode != 0)
    {
        output = proc.StandardError.ReadToEnd().Truncate(PROC_TRUNC_OUT).Replace("\r\n", " ").Replace("\r", " ").Replace("\n", " ");
        return 1;
    }

    return 0;
}

我不知道如何欺骗 OBJDUMP 并在没有外部文件的情况下直接将 RAW 转储获取到内存中,然后打开并读取该文件的二进制文件。

这个post
的聪明人 How can I examine contents of a data section of an ELF file on Linux?

objcopy file /dev/null --dump-section .text=/dev/stdout | cat

给出了一个 linux 提示以在 stdout 上重定向(我想我可以捕获),但我无法在 Win 上重现。

所以,聪明的头脑可以想出一个绝招,这可能吗?

提前谢谢你,

在 Windows 上有一个设备 "CON" 您可以利用它。

objcopy file "someFile" --dump-section .text=CON

我没有测试它,因为我没有 OBJCOPY,但它可以与 OpenSSL 一起使用。所以它应该将所有内容输出到控制台。