[原创]利用批处理快速编译测试VC网络程序
信息来源:邪恶八进制信息安全团队([url=www.eviloctal.com]www.eviloctal.com[/url])文章作者:syspro
在用VC编写一个网络程序时需要反复测试客户端和服务段。尤其是服务端的程序需要释放Dll。编译测试的时候需要进行以下操作:
1、编译Dll模块。
2、将Dll模块加壳压缩。
3、将Dll模块用BINTOC转换成文本数组。
4、将转换的文本数组粘贴到服务段主程序的代码中。
5、编译主服务端主程序。
6、配置服务端主程序。
7、测试运行。
如果手动进行以上操作,每次测试都浪费不少时间。测试频繁的时候还容易的强迫症。于是改写了bintoc,再写了个命令行下的服务段配置程序,最后写了个批处理来完成编译测试过程,内容如下。
[color=#99330]@echo off[/color]
[color=#99330]@echo compile server[/color]
[color=#99330]rem server_dll和server_install工程文件夹和编译输出文件夹分别为[/color]
[color=#99330]rem server_dll、server_install和compile。[/color]
[color=#99330]rem 在编译之前要分别在server_dll和server_install的工程中点击“Project”-〉“Export MakeFIle”[/color]
[color=#99330]rem 生成server_dll.mak和mouse_install.mak文件。[/color]
[color=#99330]rem 1、编译Dll模块。[/color]
[color=#99330]@echo compile server_dll project[/color]
[color=#99330]cd server_dll[/color]
[color=#99330]del /Q Release[/color]
[color=#99330]nmake /f server_dll.mak[/color]
[color=#99330]rem 2、将Dll模块加壳压缩,本例中用UPX ,只要支持命令行的都可以。[/color]
[color=#99330]@echo compress server_dll use upx[/color]
[color=#99330]cd..[/color]
[color=#99330]cd compile[/color]
[color=#99330]upx -9 server_dll.dll[/color]
[color=#99330]rem 3、将Dll模块用BINTOC转换成数组头文件。[/color]
[color=#99330]@echo convert server_dll to GenFile.h[/color]
[color=#99330]bintoc.exe server_dll.dll GenFile.h[/color]
[color=#99330]rem 4、将数组头文件覆盖服务段主程序的头文件。[/color]
[color=#99330]@echo copy GenFile.h to server_install project[/color]
[color=#99330]cd..[/color]
[color=#99330]copy /Y %cd%\compile\GenFile.h %cd%\server_install\GenFile.h[/color]
[color=#99330]rem 5、编译主服务端主程序。[/color]
[color=#99330]@echo compile server_install[/color]
[color=#99330]cd server_install[/color]
[color=#99330]del /Q Release[/color]
[color=#99330]nmake /f server_install.mak[/color]
[color=#99330]rem 6、配置服务端主程序。[/color]
[color=#99330]@echo config server_install[/color]
[color=#99330]cd..[/color]
[color=#99330]cd compile[/color]
[color=#99330]serverconfig.exe server_install.exe config.txt[/color]
[color=#99330]rem 7、测试运行。[/color]
[color=#99330] @echo run server_install[/color]
[color=#99330]server_install.exe[/color]
[color=#99330]cd ..[/color]
[color=#99330] [color=#000]下面是改写的bintoc源码[/color][/color]
[color=#99330]#include <stdio.h>[/color]
[color=#99330]FILE *in;[/color]
[color=#99330]FILE *out;[/color]
[color=#99330]int main(int argc, char *argv[])[/color]
[color=#99330]{[/color]
[color=#99330] unsigned char ch;[/color]
[color=#99330] int cnt = 0;[/color]
[color=#99330] if (argc < 3)[/color]
[color=#99330] {[/color]
[color=#99330] printf("usage: bin2c infile.bin outfile.h \n");[/color]
[color=#99330] return -1;[/color]
[color=#99330] }[/color]
[color=#99330] if ((out = fopen(argv[2], "wb")) == NULL)[/color]
[color=#99330] {[/color]
[color=#99330] printf("Couldn't open output file.\n");[/color]
[color=#99330] return -1;[/color]
[color=#99330] }[/color]
[color=#99330] if ((in = fopen("start.h", "rb")) != NULL)[/color]
[color=#99330] {[/color]
[color=#99330] printf("open start.h file.\n");[/color]
[color=#99330] ch = fgetc(in);[/color]
[color=#99330] while (!feof(in))[/color]
[color=#99330] {[/color]
[color=#99330] fprintf(out, "%c", ch);[/color]
[color=#99330] ch = fgetc(in);[/color]
[color=#99330] }[/color]
[color=#99330] fclose(in);[/color]
[color=#99330] }[/color]
[color=#99330] if ((in = fopen(argv[1], "rb")) == NULL)[/color]
[color=#99330] {[/color]
[color=#99330] printf("Couldn't open data file.\n");[/color]
[color=#99330] return -1;[/color]
[color=#99330] }[/color]
[color=#99330] fseek(in,0,SEEK_END); [/color]
[color=#99330] long lFileSize = ftell(in);[/color]
[color=#99330] fprintf(out, "int [/color][color=#99330]Dll[/color][color=#99330]Len[/color][color=#99330] = %ld;\n", lFileSize);[/color]
[color=#99330] fprintf(out, "unsigned char [/color][color=#99330]DllData[/color][color=#99330][%ld] = {", lFileSize);[/color]
[color=#99330] fseek(in,0,SEEK_SET);[/color]
[color=#99330] ch = fgetc(in);[/color]
[color=#99330] while (!feof(in))[/color]
[color=#99330] {[/color]
[color=#99330] if (cnt != 0)[/color]
[color=#99330] fprintf(out, ", ");[/color]
[color=#99330] if (!(cnt % 10))[/color]
[color=#99330] fprintf(out, "\n\t");[/color]
[color=#99330] fprintf(out, "0x%02x", (int)ch);[/color]
[color=#99330] cnt++;[/color]
[color=#99330] ch = fgetc(in);[/color]
[color=#99330] }[/color]
[color=#99330] fprintf(out, "\n};\n");[/color]
[color=#99330] fclose(in);[/color]
[color=#99330] if ((in = fopen("end.h", "rb")) != NULL)[/color]
[color=#99330] {[/color]
[color=#99330] printf("open end.h file.\n");[/color]
[color=#99330] ch = fgetc(in);[/color]
[color=#99330] while (!feof(in))[/color]
[color=#99330] {[/color]
[color=#99330] fprintf(out, "%c", ch);[/color]
[color=#99330] ch = fgetc(in);[/color]
[color=#99330] } [/color]
[color=#99330] fclose(in);[/color]
[color=#99330] }[/color]
[color=#99330] fclose(out);[/color]
[color=#99330] return 0;[/color]
[color=#99330]}[/color]
下面是改写的bintoc需要的文件[color=#99330]start.h
[/color][color=#99330]#include "stdafx.h"[/color]
[color=#99330]#include <stdio.h>[/color]
[color=#99330]BOOL [/color][color=#99330]CreateDllFile[/color][color=#99330]( LPSTR szPathFile );
[/color]下面是改写的bintoc需要的文件[color=#99330]end.h
[/color][color=#99330]BOOL CreateDllFile( LPSTR szPathFile )[/color]
[color=#99330]{[/color]
[color=#99330] FILE *fp;[/color]
[color=#99330] fp=fopen(szPathFile, "wb");[/color]
[color=#99330] if (fp!=NULL)[/color]
[color=#99330] {[/color]
[color=#99330] fwrite(DllData, 1, [/color][color=#99330]Dll[/color][color=#99330]Len, fp);[/color]
[color=#99330] fclose(fp);[/color]
[color=#99330] } [/color]
[color=#99330] return TRUE;[/color]
[color=#99330]}[/color]
页:
[1]