反向`copy / b prog.exe + zip.zip out.exe`

时间:2015-09-23 01:31:14

标签: windows copy command-prompt

类似的反向命令是什么(如果需要稍微更改代码以便可以检测文件应该拆分的位置,我就可以了。)

copy /b prog.exe + zip.zip out.exe

我想从原始组合中取出拉链。

我希望程序在命令提示符,powershell,node.js或c中,如果可能的话(我认为python可以工作)。

我的猜测是你可能需要一个附加到末尾的文件大小,如copy /b prog.exe + zip.zip + progsize out.exe

3 个答案:

答案 0 :(得分:1)

某些C编码(或任何其他语言,实际上)将为您提供所需内容。您需要的信息已存储在prog.exe的标题中。

即 - 512字节块的数量和最后一个块的大小(分别为04-05和02-03字节)。

通过它,您可以在prog.exe

之后立即计算字节的偏移量
extra_data_start = exe.blocks_in_file * 512L;
if (exe.bytes_in_last_block)
  extra_data_start -= (512 - exe.bytes_in_last_block);

有关详细信息,请参阅EXE Format reference,其中还定义了符合您需求的C风格struct

<强>更新
对于Windows portable executable,过程类似。您可以在Wiki上轻松找到其格式的详细信息,并相应地编写代码。

答案 1 :(得分:1)

这是尝试构建组合的exe和zip(来自原始文件)。需要7z才能使其正常工作。

(* http://stackoverflow.com/questions/218912/linux-command-like-cat-\
to-read-a-specified-quantity-of-characters *)
exe = "NegativeScreen.exe";
stream = OpenRead[exe, BinaryFormat -> True];
BinaryWrite["NS2.exe", 
  BinaryReadList[stream, "Byte", FileByteCount[exe]
   ]];
BinaryWrite["NS2.exe",
  PadLeft[ToCharacterCode@ToString@FileByteCount[exe], 10, 48]
  ];
Close[stream];
Close["NS2.exe"];

SetDirectory["C:\\Users\\a\\Desktop\\"];

files = {"$.csv"};
zip = "test.zip";
Run@"C:\\Program Files\\7-Zip\\7z.exe\" a " <> zip <> " " <> 
  StringJoin@Riffle[{"t", "b"}, " "];
Run["copy /b prog.exe + zip.zip out.exe"];

并提取内容

old = "NS2.exe";
stream = OpenRead[old, BinaryFormat -> True];
Skip[stream, "Byte", combined = (FileByteCount[old] - 10)];
exeBytes = 
  FromDigits@FromCharacterCode@BinaryReadList[stream, "Byte", 10];
Close[stream];
stream = OpenRead[old, BinaryFormat -> True];
content = BinaryReadList[stream, "Byte", exeBytes];
content2 = BinaryReadList[stream, "Byte", combined - Length@content]
Close[stream];
(* BinaryWrite[old, content,"Byte"];
Close[old]; *)

答案 2 :(得分:0)

这应该使用node.js复制数据。我相信。

fs = require('fs');

file1=fs.createReadStream('./file1',{ flags: 'r',  encoding: "binary",});
file2=fs.createReadStream('./file2',{ flags: 'r',  encoding: "binary",});

fs.stat('./file1', function (err, stats) {
    fs.writeFileSync("./size", stats.size);
    file3=fs.createReadStream('./size',{ flags: 'r',  encoding: "binary",});
    dest=fs.createWriteStream('./destinationFile',{ flags: 'w',  encoding: "binary"});

    file1.pipe(dest, { end: false });
    file2.pipe(dest, { end: false });
    file3.pipe(dest, { end: false }); 
});

test.js文件。

var fs = require('fs');

fs.stat('calibre-portable.exe', function (err, stats) {
    console.log(stats.size);
  });