VC++编译器选项设定方法

VC++编译器选项设定方法
VC++编译器选项设定方法

优化-

[]============================================================================== ==[]

/O1 最小化空间 minimize space

/Op[-] 改善浮点数一致性 improve floating-pt consistency

/O2 最大化速度 maximize speed

/Os 优选代码空间 favor code space

/Oa 假设没有别名 assume no aliasing

/Ot 优选代码速度 favor code speed

/Ob 内联展开(默认 n=0) inline expansion (default n=0)

/Ow 假设交叉函数别名 assume cross-function aliasing

/Od 禁用优化(默认值) disable optimizations (default)

/Ox 最大化选项。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)

/Og 启用全局优化 enable global optimization

/Oy[-] 启用框架指针省略 enable frame pointer omission

/Oi 启用内建函数 enable intrinsic functions

[]============================================================================== ==[]

-代码生成-

[]============================================================================== ==[]

/G3 为 80386 进行优化 optimize for 80386

/G4 为 80486 进行优化 optimize for 80486

/GR[-] 启用 C++ RTTI enable C++ RTTI

/G5 为 Pentium 进行优化 optimize for Pentium

/G6 为 Pentium Pro 进行优化 optimize for Pentium Pro

/GX[-] 启用 C++ 异常处理(与 /EHsc 相同) enable C++ EH (same as /EHsc)

/EHs 启用同步 C++ 异常处理 enable synchronous C++ EH

/GD 为 Windows DLL 进行优化 optimize for Windows DLL

/GB 为混合模型进行优化(默认) optimize for blended model (default)

/EHa 启用异步 C++ 异常处理 enable asynchronous C++ EH

/Gd __cdecl 调用约定 __cdecl calling convention

/EHc extern“C”默认为 nothrow extern "C" defaults to nothrow

/Gr __fastcall 调用约定 __fastcall calling convention

/Gi[-] 启用增量编译 enable incremental compilation

/Gz __stdcall 调用约定 __stdcall calling convention

/Gm[-] 启用最小重新生成 enable minimal rebuild

/GA 为 Windows 应用程序进行优化 optimize for Windows Application

/Gf 启用字符串池 enable string pooling

/QIfdiv[-] 启用 Pentium FDIV 修复 enable Pentium FDIV fix

/GF 启用只读字符串池 enable read-only string pooling

/QI0f[-] 启用 Pentium 0x0f 修复 enable Pentium 0x0f fix

/Gy 分隔链接器函数 separate functions for linker

/GZ 启用运行时调试检查 enable runtime debug checks

/Gh 启用钩子函数调用 enable hook function call

/Ge 对所有函数强制堆栈检查 force stack checking for all funcs

/Gs[num] 禁用堆栈检查调用 disable stack checking calls

[]============================================================================== ==[]

-输出文件-

[]============================================================================== ==[]

/Fa[file] 命名程序集列表文件 name assembly listing file

/Fo 命名对象文件 name object file

/FA[sc] 配置程序集列表 configure assembly listing

/Fp 命名预编译头文件 name precompiled header file

/Fd[file] 命名 .PDB 文件 name .PDB file

/Fr[file] 命名源浏览器文件 name source browser file

/Fe 命名可执行文件 name executable file

/FR[file] 命名扩展 .SBR 文件 name extended .SBR file

/Fm[file] 命名映射文件 name map file

[]============================================================================== ==[]

-预处理器-

[]============================================================================== ==[]

/FI 命名强制包含文件 name forced include file

/C 不吸取注释 don't strip comments

/U 移除预定义宏 remove predefined macro

/D{=|#} 定义宏 define macro

/u 移除所有预定义宏 remove all predefined macros

/E 将预处理定向到标准输出 preprocess to stdout

/I 添加到包含文件的搜索路径 add to include search path

/EP 将预处理定向到标准输出,不要带行号 preprocess to stdout, no #line

/X 忽略“标准位置” ignore "standard places"

/P 预处理到文件 preprocess to file

[]============================================================================== ==[]

-语言-

[]==============================================================================

==[]

/Zi 启用调试信息 enable debugging information

/Zl 忽略 .OBJ 中的默认库名 omit default library name in .OBJ

/ZI 启用调试信息的“编辑并继续”功能 enable Edit and Continue debug info

/Zg 生成函数原型 generate function prototypes

/Z7 启用旧式调试信息 enable old-style debug info

/Zs 只进行语法检查 syntax check only

/Zd 仅要行号调试信息 line number debugging info only

/vd{0|1} 禁用/启用 vtordisp disable/enable vtordisp

/Zp[n] 在 n 字节边界上包装结构 pack structs on n-byte boundary

/vm 指向成员的指针类型 type of pointers to members

/Za 禁用扩展(暗指 /Op) disable extensions (implies /Op)

/noBool 禁用“bool”关键字 disable "bool" keyword

/Ze 启用扩展(默认) enable extensions (default)

[]============================================================================== ==[]

- 杂项 -

[]============================================================================== ==[]

/?, /help 打印此帮助消息 print this help message

/c 只编译,不链接 compile only, no link

/W 设置警告等级(默认 n=1) set warning level (default n=1)

/H 最大化外部名称长度 max external name length

/J 默认 char 类型是 unsigned default char type is unsigned

/nologo 取消显示版权消息 suppress copyright message

/WX 将警告视为错误 treat warnings as errors

/Tc 将文件编译为 .c compile file as .c

/Yc[file] 创建 .PCH 文件 create .PCH file

/Tp 将文件编译为 .cpp compile file as .cpp

/Yd 将调试信息放在每个 .OBJ 中 put debug info in every .OBJ

/TC 将所有文件编译为 .c compile all files as .c

/TP 将所有文件编译为 .cpp compile all files as .cpp

/Yu[file] 使用 .PCH 文件 use .PCH file

/V 设置版本字符串 set version string

/YX[file] 自动的 .PCH 文件 automatic .PCH

/w 禁用所有警告 disable all warnings

/Zm 最大内存分配(默认为 %) max memory alloc (% of default)

[]============================================================================== ==[]

-链接-

[]============================================================================== ==[]

/MD 与 MSVCRT.LIB 链接 link with MSVCRT.LIB

/MDd 与 MSVCRTD.LIB 调试库链接 link with MSVCRTD.LIB debug lib

/ML 与 LIBC.LIB 链接 link with LIBC.LIB

/MLd 与 LIBCD.LIB 调试库链接 link with LIBCD.LIB debug lib

/MT 与 LIBCMT.LIB 链接 link with LIBCMT.LIB

/MTd 与 LIBCMTD.LIB 调试库链接 link with LIBCMTD.LIB debug lib

/LD 创建 .DLL Create .DLL

/F 设置堆栈大小 set stack size

/LDd 创建 .DLL 调试库 Create .DLL debug libary

/link [链接器选项和库] [linker options and libraries]

//////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////

vc 编译连接选项

//////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////

大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢?

闲话少说。我们先来看一下VC的处理流程,大致分为两步:编译和连接。源文件通过编译生成了.obj文件;所有.obj文件和.lib文件通过连接生成.exe文件或.dll文件。下面,我们分别讨论这两个步骤的一些细节。

编译参数的设置。主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:

/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_M

BCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

各个参数代表的意义,可以参考Msdn。比如/nologo表示编译时不在输出窗口显示这些设置(我们可以把这个参数去掉来看看效果)等等。一般我们不会直接修改这些设置,而是通过这一页最上面的Category中的各项来完成。

1) General:一些总体设置。Warning level用来控制警告信息,其中Level 1是最严

重的级别;Warnings as errors将警告信息当作错误处理;Optimizations是代码优化,可以在Category的Optimizations项中进行更细的设置;Generate browse info用以生成.sbr 文件,记录类、变量等符号信息,可以在Category的Listing Files项中进行更多的设置。Debug info,生成调试信息:None,不产生任何调试信息(编译比较快);Line Numbers Only,仅生成全局的和外部符号的调试信息到.OBJ文件或.EXE文件,减小目标文件的尺寸;C 7.0- Compatible,记录调试器用到的所有符号信息到.OBJ文件和.EXE文件;Program Database,创建.PDB文件记录所有调试信息;Program Database for "Edit & Continue",创建.PDB 文件记录所有调试信息,并且支持调试时编辑。

2) C++ Language:pointer_to_member representation用来设置类定义/引用的先后关系,一般为Best-Case Always表示在引用类之前该类肯定已经定义了;Enable Exception Handling,进行同步的异常处理;Enable Run-Time Type Information迫使编译器增加代码在运行时进行对象类型检查;Disable Construction Displacements,设置类构造/析构函数调用虚函数问题。

3) Code Generation:Processor表示代码指令优化,可以为80386、80486、Pentium、Pentium Pro,或者Blend表示混合以上各种优化。Use run-time library用以指定程序运行时使用的运行时库(单线程或多线程,Debug版本或Release版本),有一个原则就是,一个进程不要同时使用几个版本的运行时库。Single-Threaded,静态连接LIBC.LIB库;Debug Single-Threaded,静态连接LIBCD.LIB库;Multithreaded,静态连接LIBCMT.LIB库;Debug Multithreaded,静态连接LIBCMTD.LIB库;Multithreaded DLL,动态连接MSVCRT.DLL库;Debug Multithreaded DLL,动态连接MSVCRTD.DLL库。连接了单线程库就不支持多线程调用,连接了多线程库就要求创建多线程的应用程序。

Calling convention可以用来设定调用约定,有三种:__cdecl、__fastcall和__stdcall。各种调用约定的主要区别在于,函数调用时,函数的参数是从左到右压入堆栈还是从右到左压入堆栈;在函数返回时,由函数的调用者来清理压入堆栈的参数还是由函数本身来清理;以及在编译时对函数名进行的命名修饰(可以通过Listing Files看到各种命名修饰方式)。Struct member alignment用以指定数据结构中的成员变量在内存中是按几字节对齐的,根据计算机数据总线的位数,不同的对齐方式存取数据的速度不一样。这个参数对数据包网络传输等应用尤为重要,不是存取速度问题,而是数据位的精确定义问题,一般在程序中使用#pragma pack来指定。

4) Customize:Disable Language Extensions,表示不使用微软为标准C做的语言扩展;Eliminate Duplicate Strings,主要用于字符串优化(将字符串放到缓充池里以节省空间),使用这个参数,使得

char *sBuffer = "This is a character buffer";

char *tBuffer = "This is a character buffer";

sBuffer和tBuffer指向的是同一块内存空间;Enable Function-Level Linking ,告诉编译器将各个函数按打包格式编译;Enables minimal rebuild,通过保存关联信息到.IDB

文件,使编译器只对最新类定义改动过的源文件进行重编译,提高编译速度;Enable Incremental Compilation,同样通过.IDB文件保存的信息,只重编译最新改动过的函数;Suppress Startup Banner and Information Messages,用以控制参数是否在output窗口输出。

5) Listing Files:Generate browse info的功能上面已经提到过。这里可以进行更多的设置。Exclude Local Variables from Browse Info表示是否将局部变量的信息放到.SBR 文件中。Listing file type可以设置生成的列表信息文件的内容:Assembly-Only Listing 仅生成汇编代码文件(.ASM扩展名);Assembly With Machine Code生成机器代码和汇编代码文件(.COD扩展名);Assembly With Source Code生成源代码和汇编代码文件(.ASM扩展名);Assembly, Machine Code,and Source生成机器码、源代码和汇编代码文件(.COD 扩展名)。Listing file name为生成的信息文件的路径,一般为Debug或Release目录下,生成的文件名自动取源文件的文件名。

6) Optimizations:代码优化设置。可以选择Maximize Speed生成最快速的代码,或Minimize Size生成最小尺寸的程序,或者Customize定制优化。定制的内容包括:

Assume No Aliasing,不使用别名(提高速度);

Assume Aliasing Across Function Calls,仅函数内部不使用别名;

Global Optimizations,全局优化,比如经常用到的变量使用寄存器保存,或者循环内的计算优化,如

i = -100;

while( i < 0 ){ i += x + y;}

会被优化为

i = -100;

t = x + y;

while( i < 0 ){i += t;}

Generate Intrinsic Functions,使用内部函数替换一些函数调用(提高速度);

Improve Float Consistency,浮点运算方面的优化;

Favor Small Code,程序(exe或dll)尺寸优化优先于代码速度优化;

Favor Fast Code,程序(exe或dll)代码速度优化优先于尺寸优化;

Frame-Pointer Omission,不使用帧指针,以提高函数调用速度;

Full Optimization,组合了几种参数,以生成最快的程序代码。

Inline function expansion,内联函数扩展的三种优化(使用内联可以节省函数调用的

开销,加快程序速度):Disable不使用内联;Only __inline,仅函数定义前有inline或__inline标记使用内联;Any Suitable,除了inline或__inline标记的函数外,编译器“觉得”应该使用内联的函数,都使用内联。

7) Precompiled Headers:预编译头文件的设置。使用预编译可以提高重复编译的速度。VC一般将一些公共的、不大变动的头文件(比如afxwin.h等)集中放到stdafx.h中,这一部分代码就不必每次都重新编译(除非是Rebuild All)。

8) Preprocessor:预编译处理。可以定义/解除定义一些常量。Additional include directories,可以指定额外的包含目录,一般是相对于本项目的目录,如..\Include。

连接参数的设置。主要通过VC的菜单项Project->Settings->Link页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:

/nologo /subsystem:windows /incremental:yes /pdb:"Debug/WritingDlgTest.pdb" /debug /machi

ne:I386 /out:"Debug/WritingDlgTest.exe" /pdbtype:sept

下面我们分别来看一下Category中的各项设置。

1) General:一些总体设置。可以设置生成的文件路径、文件名;连接的库文件;Generate debug info,生成Debug信息到.PDB文件(具体格式可以在Category->Debug中设置);Ignore All Default Libraries,放弃所有默认的库连接;Link Incrementally,通过生成. ILK文件实现递增式连接以提高后续连接速度,但一般这种方式下生成的文件(EXE或DLL)较大;Generate Mapfile,生成.MAP文件记录模块相关信息;Enable Profiling,这个参数通常与Generate Mapfile参数同时使用,而且如果产生Debug信息的话,不能用.PDB文件,而且必须用Microsoft Format。

2) Customize:这里可以进行使用程序数据库文件的设置。Force File Output ,强制产生输出文件(EXE或DLL);Print Progress Messages,可以将连接过程中的进度信息输出到Output窗口。

3) Debug:设置是否生成调试信息,以及调试信息的格式。格式可以有Microsoft Format、COFF Format(Common Object File Format)和Both Formats三种选择;Separate Types,表示将Debug格式信息以独立的.PDB文件存放,还是直接放在各个源文件的.PDB文件中。选中的话,表示采用后者的方式,这种方式调试启动比较快。

4) Input:这里可以指定要连接的库文件,放弃连接的库文件。还可以增加额外的库文件目录,一般是相对于本项目的目录,如..\Lib。Force Symbol References,可以指定连接特定符号定义的库。

5) Output:Base Address可以改变程序默认的基地址(EXE文件默认为0x400000,DLL 默认为x10000000),操作系统装载一个程序时总是试着先从这个基地址开始。Entry-Point

Symbol可以指定程序的入口地址,一般为一个函数名(且必须采用__stdcall调用约定)。一般Win32的程序,EXE的入口为WinMain,DLL的入口为DllEntryPoint;最好让连接器自动设置程序的入口点。默认情况下,通过一个C的运行时库函数来实现:控制台程序采用mainCRTStartup (或wmainCRTStartup)去调用程序的main (或wmain)函数;Windows程序采用WinMainCRTStartup (或 wWinMainCRTStartup)调用程序的WinMain (或 wWinMain,必须采用__stdcall调用约定);DLL采用_DllMainCRTStartup调用DllMain函数(必须采用__stdcall调用约定)。Stack allocations,用以设置程序使用的堆栈大小(请使用十进制),默认为1兆字节。Version Information告诉连接器在EXE或DLL文件的开始部分放上版本号。

值得注意的是,上面各个参数是大小写敏感的;在参数后加上“-”表示该参数无效;各个参数值选项

有“*”的表示为该参数的默认值;可以使用页右上角的“Reset”按钮来恢复该页的所有默认设置。

其它一些参数设置

1) Project->Settings->General,可以设置连接MFC库的方式(静态或动态)。如果是动态连

接,在你的软件发布时不要忘了带上MFC的DLL。

2) Project->Settings->Debug,可以设置调试时运行的可执行文件,以及命令行参数等。

3) Project->Settings->Custom Build,可以设置编译/连接成功后自动执行一些操作。比较有

用的是,写COM时希望VC对编译通过的COM文件自动注册,可以如下设置:Description: Register COM

Commands: regsvr32 /s /c $(TargetPath)

echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg

Outputs: $(TargetDir)\$(TargetName).trg

4) Tools->Options->Directories,设置系统的Include、Library路径。

一些小窍门

1) 有时候,你可能在编译的时候,计算机突然非法关机了(可能某人不小心碰了电源或你的内存不稳定等原因)。当你重启机器后打开刚才的项目,重新进行编译,发现VC会崩掉。

你或许以为你的VC编译器坏了,其实不然(你试试编译其它项目,还是好的!),你只要将项目的.ncb、.opt、.aps、.clw文件以及Debug、Release目录下的所有文件都删掉,然后重新编译就行

了。

2) 如果你想与别人共享你的源代码项目,但是把整个项目做拷贝又太大。你完全可以删掉以下文件:.dsw、.ncb、.opt、.aps、.clw、. plg文件以及Debug、Release目录下的所有文件。

3) 当你的Workspace中包含多个Project的时候,你可能不能直观地、一眼看出来哪个是当前项目。可以如下设置:Tools->Options->Format,然后在Category中选择Workspace window,改变其默认的字体(比如设成Fixedsys)就行了。

4) 如何给已有的Project改名字?将该Project关掉。然后以文本格式打开.dsp文件,替换原来的Project名字即可。

5) VC6对类成员的智能提示功能很有用,但有时候会失灵。你可以先关掉项目,将.clw 和.ncb删掉,然后重新打开项目,点击菜单项View->ClassWizard,在弹出的对话框中按一下“Add All”按钮;重新Rebuild All。应该可以解决问题。

//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////

Visual C++ 编译器选项的说明:

//////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////

这些选项选择单线程或多线程运行时例程,指示多线程模块是否为 DLL,并选择运行时库的发布版本或调试版本。

/MD

定义 _MT 和 _DLL 以便同时从标准 .h 文件中选择运行时例程的多线程特定版本和 DLL 特定版本。此选项还使编译器将库名 MSVCRT.lib 放入 .obj 文件中。

用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR71.DLL 中,该库必须在运行时对于与 MSVCRT.lib 链接的应用程序可用。

当在定义了 _STATIC_CPPLIB (/D_STATIC_CPPLIB) 的情况下使用 /MD 时,它将导致应用程序通过静态多线程标准 C++ 库 (libcpmt.lib) 而非动态版本 (msvcprt.lib) 进行链接,同时仍通过 msvcrt.lib 动态链接到主 CRT。

/MDd

定义 _DEBUG、_MT 和 _DLL,以便从标准 .h 文件中选择运行时例程的调试多线程特定版本和 DLL 特定版本。它还使编译器将库名 MSVCRTD.lib 放入 .obj 文件中。

/ML

使编译器将库名 LIBC.lib 放入 .obj 文件中,以便链接器使用 LIBC.lib 解析外部符号。这是编译器的默认操作。LIBC.lib 不提供多线程支持。

/MLd

定义 _DEBUG 并使编译器将库名 LIBCD.lib 放入 .obj 文件中,以便链接器使用 LIBCD.lib 解析外部符号。LIBCD.lib 不提供多线程支持。

/MT

定义 _MT,以便从标准头 (.h) 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMT.lib 放入 .obj 文件中,以便链接器使用 LIBCMT.lib 解析外部符号。创建多线程程序需要 /MT 或 /MD(或它们的调试等效选项 /MTd 或 /MDd)。

/MTd

定义 _DEBUG 和 _MT。定义 _MT 会导致从标准 .h 文件中选择运行时例程的多线程特定版本。此选项还使编译器将库名 LIBCMTD.lib 放入 .obj 文件中,以便链接器使用 LIBCMTD.lib 解析外部符号。创建多线程程序需要 /MTd 或 /MDd(或它们的非调试等效选项 /MT 或 MD)。

/LD

创建 DLL。

将 /DLL 选项传递到链接器。链接器查找 DllMain 函数,但并不需要该函数。如果没有编写DllMain 函数,链接器将插入返回 TRUE 的 DllMain 函数。

链接 DLL 启动代码。

如果命令行上未指定导出 (.exp) 文件,则创建导入库 (.lib);将导入库链接到调用您的DLL 的应用程序。

将 /Fe 解释为命名 DLL 而不是 .exe 文件;默认程序名成为基名称.dll 而不是基名称.exe。

如果还未显式指定 /M 选项之一,则将默认运行时库支持更改为 /MT。

/LDd

创建调试 DLL。定义 _DEBUG。

警告

不要混合使用运行时库的静态版本和动态版本。在一个进程中有多个运行时库副本会导致问题,因为副本中的静态数据不与其他副本共享。链接器禁止在 .exe 文件内部既使用静态版本又使用动态版本链接,但您仍可以使用运行时库的两个(或更多)副本。例如,当与用动态 (DLL) 版本的运行时库链接的 .exe 文件一起使用时,用静态(非 DLL)版本的运行时库链接的动态链接库可能导致问题。(还应该避免在一个进程中混合使用这些库的调试版本和非

调试版本)。

有关使用运行时库的调试版本的更多信息,请参见运行时库参考

有关 DLL 的进一步讨论,请参见 DLL。

在 Visual Studio 开发环境中设置此编译器选项

打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。单击“C/C++”文件夹。

单击“代码生成”属性页。

修改“运行时库”属性。

以编程方式设置此编译器选项

请参见 RuntimeLibrary 属性

VC++版 外挂编程 大纲

课程安排,暂定,有可能会实时修改 编程语言:VC++6.0 分析工具主要为(OD1.1,CE5.4,CE5.5) 预计平均3天左右更新一课 https://www.360docs.net/doc/a1701673.html, //主站,不定期开放注册 https://www.360docs.net/doc/a1701673.html, //学员站,学员专用交流,永不对外开放大家好,我是郁金香灬老师:QQ:150330575 欢迎大家参加郁金香灬技术VC++外挂编程VIP培训班 在接下来的一段时间将由我和大家一起学习游戏外挂的分析,制作。 课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的使用技巧(如硬件断点,条件断点,内存断点。 常用汇编指令与对应高级语言的转换。 游戏功能CALL概念 找第一个功能CALL 外挂框架的构建(通用) 进阶篇内容:分析游戏内部数据,分析常用功能CALL 游戏数据实践找各种功能CALL(如打怪,选怪,物品使用,技能栏之类)及相应的代码编写 高级篇内容:编写完整外挂 完成一个相对完整的外挂,实现自动挂机,打怪,存放物品之类的功能 1 入门篇.以《QQ连连看为例》 1.1、一个最简单的外挂 1.1.1、游戏窗口数据分析(SPY++) a、取得窗口相对坐标 b、读出游戏窗口信息GetWindowRect c、移动鼠标指针SetCursorPos 1.1.2 用VC++写个最简单的外挂(实现游戏开局) a、鼠拟鼠标单击mouse_event b、鼠标指针移动还原 c、集成到startgame函数里 1.2、用CE查找棋盘数据 1.2.1、CE中的数据类型 a、数据类型:Bit,Byte,Word,Dword,float,double b、用CE查找出坐位号;

易语言入门教程,外挂制作宝典

第一课.易语言的基本概念 1.全可视化 一般的可视化编程语言,仅支持图形用户界面的可视化设计操作,而易语言除了支持此类可视化操作,还支持程序流程的即时可视化呈视,极大地减少了程序录入错误。即:用户在编写程序的过程中,可以即时看到当前程序的运行流程及路线,有助于培养编程思路,提高解决编程问题的能力。 学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。 2.全中文 作为一款由中国人自己开发的编程语言,易语言在中文处理方面有良好的支持。用户在编写程序的过程中,可以不接触任何英文。根本不懂英文的人使用中文编写代码也没有任何障碍。 (1)中文名称的快速录入。易语言内置四种名称输入法:首拼、全拼、双拼、英文。三种拼音输入法均全面支持南方音。使用这些输入法能够极大地提高中文代码的输入速度。 直接使用系统提供的输入法,如五笔字型、智能ABC、紫光拼音、自然码等,同样可以进行程序的输入。 (2)程序全部以中文方式显示,运算符号全部显示为对应的中文符号(≥≤≠≈×÷),日期时间以中文格式呈现(年月日时分秒),以便于中文用户理解、阅读程序。 (3)适合中国人的语言、思维习惯。对其它计算机编程语言的学习,总会感到某种限制,首先是语言环境的限制,有很多专业的术语字面上很难理解它的含义,而以中文编写出的程序代码,符合中国人的语法习惯和逻辑思维,可以做到见文思义,更加适合中国人使用。在以后复查程序时可以非常直观地分析;给其他人源代码学习时也会非常简单,相互交流变得更加容易。 易语言更提供了中文格式日期时间处理、汉字发音处理、全半角字符处理、人民币金额处理等功能支持。 3.全编译与跨平台 易语言拥有自己独立的高质量编译器,中文源代码被直接编译为目的机器的CPU指令,高效且不存在任何速度瓶颈和安全隐患。 易语言现已同时支持Windows和Linux程序开发,不再依赖特定的操作系统。 4.可扩充支持库 易语言由基本系统和运行支持库两部分组成,两者之间通过使用易语言自行定义的接口技术进行协作。运行支持库内提供了易语言的所有语言要素,如:命令、窗口和报表单元数据类型、普通数据类型、常量等等。可以通过安装外部支持库来扩充易语言基本系统。运行支持库还可以被随意增减、抽换或升级,基本系统对运行支持库提供了详细的版本控制。本技术给用户带来的最大好处是:

VB制作外挂示例

VB制作外挂示例 使 用VB编写的修改器需要VB的运行库才能运行。如果考虑到有些使用者(实际上可能是大部分使用者)没有运行库,那么在最后制作的ZIP压缩文件中就必须包 含这些庞大的文件。在下面的教程里我将制作一个修改器,如果为它再制作一个安装程序,那么整个修改器的体积将超过1MB。其中包括一个很好的安装和反安装 程序,但大部分还是VB40032.DLL这个文件。 除了以上这点,使用VB制作修改器是非常简单的。一旦制作了多次后,你会发现能很快地制作出一个修改器。而且使用VB 制作的修改器能够毫无困难地解决游戏 运行时的动态内存分配问题,因此即使是最新的游戏,也可以使用VB制作修改器。在本教程中将不涉及动态内存分配,因为虽然简单,但仍然属于一个高级的选 项。 一些背景知识 不象C语音,VB不会自动包括普通的API函数的声明,因此我们必须把他们加入我们的项目文件。在几乎所有的修改器中会使用到6个主要的函数,讨论如下: 1. FindWindow(ClassName, WindowTitle) - FindWindow 返回符合指定的类名( ClassName )和窗口名( WindowTitle )的窗口句柄。对我们来说,可以让 ClassName 为空( Null ),只给出游戏的 WindowTitle。函数应该这样声明: Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 2. GetWindowThreadProcessId(WindowHandle, ProcessId) - 在这里我们把 FindWindow 函数中得到的句柄作为参数,来获得进程标识符(ProcessId )。声明如下: Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long 3. OpenProcess(DesiredAccess, Inherit, ProcessId) - 这个函数将返回一个我们目标进程的句柄,可以用来对目标进行读写操作。 DesiredAccess 参数的值决定了句柄对进程的存取权利,对我们来说,要使用 PROCESS_ALL_ACCESS (完全存取权限)。Inherit 应该总是 False。 ProcessId 是从 GetWindowThreadProcessId 函数中取得的。 Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long 4. CloseHandle(ProcessHandle) - 每一个打开的句柄必须呼叫这个函数来关闭。 Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 5. WriteProcessMemory(ProcessHandle, Address, value, Sizeofvalue, BytesWritten) - 把指定的值 value 写入由 Address 指定的目标地址。 Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long 6. ReadProcessMemory(ProcessHandle, Address, value, Sizeofvalue, BytesWritten) - 把 Address 指定的目标地址的值存入 value 位置的变量中。 Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long 这些函数一环扣一环,缺一不可。更详细的内容可以参考VB的帮助文件。 一个简单的修改器范例 如何使上面介绍的这些函数一起工作,制作出我们需要的修改器呢?下面是一个为Windows的计算器程序制作修改器的例子。这个修改器将读出计算器窗口中显示的数值,并在点击一个按钮后在计算器窗口中显示我们的名字。 首先我们需要找到计算器显示窗口中显示值的地址。本教程不是关于如何进行内存搜索,因而我将只作简单的说明: · 在计算器窗口中输入123456 · 使用你喜欢的任何一种内存地址搜索程序寻找字串123456 · 使用另一个值重复上面的过程直到只返回1个地址

相关文档
最新文档