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 一起使用。所以它应该将所有内容输出到控制台。
我需要在 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 一起使用。所以它应该将所有内容输出到控制台。