制作自定义自提取器

我会解释我想要的东西,然后我将解释我是如何实现它的。我想知道我是否正确地对待这个问题,或者是否有更容易的事情。 我想要的是:一个自解压的可执行文件,它也有一个额外的入口点(这使得可执行文件适合使用,就好像它是一个DLL)。附加入口点不得是压缩有效负载的一部分。奇怪的是,切入点不会执行任何LZMA功能(请不要问为什么......长篇故事)。仅供参考:使用DLL入口点制作可执行文件是一件小事 - 我已经知道如何做到这一点。 我是如何追求这个:我已经下载了LZMA SDK并将构建我自己的C ++自提取器。似乎没有LZMA API文档。显然,如果我想学习如何使用LZMA,我必须阅读。 C util 7z 7zmain.c或。 cpp 7zip bundles lzmaCon lzmaAlone.cpp。我不知道研究这些是否是最快的学习工具。 一旦我创建了自解压代码,那么我将添加我需要的DLL入口点并构建。生成的EXE自提取器我将与一个zip文件连接(一个DOS命令应该足以连接这两个文件)。这应该达到我的目标。 思考? 附:顺便说一句,这部分年前我已经部分完成了。我创建了一个自我提取器(我认为是C#)可执行文件,然后我用一个zip文件(通过DOS命令)连接起来。 Voila,一个自解压缩的zip可执行文件出现了。是什么让我目前的努力与众不同,现在我正在使用C ++,我需要这个额外的/任意的DLL入口点。     
已邀请:
为什么要将两种功能结合在一起?你为什么不制作一个dll和一个使用它的可执行文件。     
您可以看看NSIS如何创建LZMA自动提取器。然后你可以使用DLL入口点扩展它。 或许您可以使用NSIS脚本生成自提取器并使用其脚本语言来创建DLL条目。     
至于.exe中的导出函数,显然不是问题, 我试过这个并且它工作了(使用/ FIXED:NO链接器选项编译, 然后将可执行文件复制到2.exe,然后尝试运行原始可执行文件和2.exe)
#include <stdio.h>
#include <windows.h>

//#pragma comment(linker,"/FIXED:NO")

extern "C"
__declspec(dllexport)
void __cdecl func( void ) {
  int a;
  __asm {
    call m0
    m0: pop a
  }
  printf( "dll func! @ %08Xn", a );
}

typedef void (*__cdecl pfunc)( void );

int main( void ) {

  HMODULE h = LoadLibrary( "2.exe" );
  printf( "h=%08Xn", h );

  void* p = GetProcAddress( h, "func" );
  printf( "p=%08Xn", p );

  pfunc f = pfunc(p);
  f();

}
至于lzma,它的问题就更少了,试试这个http://nishi.dreamhosters.com/u/lzma.rar,如果原始来源看起来太复杂了 (lzmadec.c) 我不太明白附加一个zip文件的想法...你的意思是.zipx 用lzma压缩?或者你真的需要看看zlib?     

要回复问题请先登录注册