目标的功能是:在Exe程序A中,填写相关信息,然后生成Exe程序B。目前是用流和资源文件的形式,将程序B预先生成好,然后在A中,将相关信息挂到B的PE的末尾,生成一个新的Exe程序B。我想请教下,能否直接借用Delphi的编译器 DCC32.EXE  来直接 编译B的代码,而不是预先生成好。

解决方案 »

  1.   

    这样你就要带上一个源码和一个编译器和链接器,挂信息可以直接用注入或者PE操作hex写入
      

  2.   


    gyk120大哥能否讲讲怎么注入或者PE操作hex写入,有简单示例也行
      

  3.   

    按你的要求,理论上可以实现(不用修改PE的)
    1.)将B的源码放入 a.exe中
    2.)a.exe接收相关信息,将b的源码从资源中导出并修改
    3.)编译b的源码,生成b.exe
    4.)执行b.exe
    但问题是,你目标机上不一定有编译器的,那又有两个方案
    1.要求目标机装有编译器
    2.将编译器也放入A资源(不是一个dcc32就能解决问题的,还有一堆DLL)
    ----------------------------------
    我不知LZ为什么要这么做,通过A.exe在资源中释放B.exe,这个很方便,将A.exe接收相关信息传给B.exe也有很多方法(如数据库,文件,注册表,内存共享等,最简单的,如果数据少,通过参数或环境变量都可以),为什么一定要生成在b.exe本身呢
    另外的方法,直接用a.exe修改b.exe的资源,以前做过的.如果需要,可帮你找一找
      

  4.   

    用D高版本编译的时候,你会看到一句信息
    make XXXXXXXXXXXXXXXXXXX复制一下,就是你要的了。
      

  5.   

    非常感谢各位大哥的热心解答,我是想做一个类似于注册机的东西,不过需要外部输入一些参数。
    我之所以想这样弄,是考虑到这些参数的保密性。如果直接挂在PE的末尾,感觉不是很合适。
    不知道是否有更合适的方法。恳请 keiy 大哥有空的时候能帮忙找找,让小弟学习参考一下,不甚感激~
      

  6.   

    我找了一下,自己电脑上程序没找到,不过找到了我以前在CSDN上回过的贴,用BCB的.
    http://topic.csdn.net/t/20060720/11/4892716.html
    那个是改exe文件资源中的图标的
    改其它资源(如字符串表)原理相同(有很多软件改资源的)
    你可先在b的资源文件中加入若干字串值,然后在A运行时修改它的值
      

  7.   

    楼主,你目前所用的方法是通用的方法,不需要改进。但是流写入有很多小技巧,结合结构体来做,可以写得相当完美。两年前我也研究过动态生成exe的技术,目前仍然确定你这种做法是唯一的做法。你不可能再创一种其它方法出来。