VC直接编译数据文件到程序中。
2013-01-11 10:31
477 查看
源程序中的全局变量会编译进.data段,例如数据表,如果一个数据表非常大,在源文件中用源代码的形式表现出来非常麻烦,可以用一种变通的方法来处理:
把这个数据表放在一个二进制文件中,用nasm汇编工具中的incbin伪指令来引入这个二进制文件,并编译成vc格式的obj文件,vc程序链接进目标程序就可以按数组的方式来使用这个二进制文件中的数据了。
====================================================
一个示例:
data.bin文件包含:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ……
data.asm文件:
[bits 32]
[section .data]
global _g_cdata
_g_cdata incbin "data.bin"
把data.asm文件添加到vc工程的源文件中,设置data.asm的属性,在custom build选项中,指定nasm编译项的命令行commands:nasm.exe -f win32 .\data.asm -o .\debug\data.obj
指定outputs:.\debug\data.obj,让vc把obj文件编译进目标程序中。
test.cpp文件:
extern "c" char g_cdata[];
int main()
{
// 可以像数组一样来操作g_cdata这个在asm汇编代码中incbin进来的二进制文件中的数据
g_cdata[0] = 0x10;
}
==================================================
这种方法可以把特定的数据块编译到程序的指定数据段,由vc编译器完成,不需要额外的处理,在做一些反编译的工作时,是很方便的一种方法。
把这个数据表放在一个二进制文件中,用nasm汇编工具中的incbin伪指令来引入这个二进制文件,并编译成vc格式的obj文件,vc程序链接进目标程序就可以按数组的方式来使用这个二进制文件中的数据了。
====================================================
一个示例:
data.bin文件包含:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ……
data.asm文件:
[bits 32]
[section .data]
global _g_cdata
_g_cdata incbin "data.bin"
把data.asm文件添加到vc工程的源文件中,设置data.asm的属性,在custom build选项中,指定nasm编译项的命令行commands:nasm.exe -f win32 .\data.asm -o .\debug\data.obj
指定outputs:.\debug\data.obj,让vc把obj文件编译进目标程序中。
test.cpp文件:
extern "c" char g_cdata[];
int main()
{
// 可以像数组一样来操作g_cdata这个在asm汇编代码中incbin进来的二进制文件中的数据
g_cdata[0] = 0x10;
}
==================================================
这种方法可以把特定的数据块编译到程序的指定数据段,由vc编译器完成,不需要额外的处理,在做一些反编译的工作时,是很方便的一种方法。
相关文章推荐
- 利用vc 6.0目录下的cl.exe直接编译程序的方法
- [C/C++] VC2012编译的程序在WinXP下报告“指定的可执行文件不是有效的 Win32 应用程序”错误
- fastreport3.15, 先御览打印一条数据,但再调用装载fr3文件时会失败,程序直接退出?
- vc release错误追踪位置,程序不弹错直接退出,后生成日志文件。
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- VC中编译有C源文件的程序
- 利用vc 6.0目录下的cl.exe直接编译程序的方法
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- 利用vc 6.0目录下的cl.exe直接编译程序的方法
- 在程序编译的时候,头文件不参与编译,源文件单独编译(VC),但编译源文件时,会展开其包含的头文件
- 利用vc 6.0目录下的cl.exe直接编译程序的方法[整理]
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- 利用vc 6.0目录下的cl.exe直接编译程序的方法
- 利用vc 6.0目录下的cl.exe直接编译程序的方法[整理]
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- 如何将VC++程序纯净打包(VS2013+OpenCV 2.4.9项目生成EXE文件如何在其他电脑上直接运行)
- 让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件
- VC中释放程序中地资源到文件