类似的反向命令是什么(如果需要稍微更改代码以便可以检测文件应该拆分的位置,我就可以了。)
copy /b prog.exe + zip.zip out.exe
我想从原始组合中取出拉链。
我希望程序在命令提示符,powershell,node.js或c中,如果可能的话(我认为python可以工作)。
我的猜测是你可能需要一个附加到末尾的文件大小,如copy /b prog.exe + zip.zip + progsize out.exe
。
答案 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);
});