`
369540808
  • 浏览: 203332 次
文章分类
社区版块
存档分类
最新评论

关于C++(VC2005)编译多一条JMP指令的问题,待解决

 
阅读更多

时间问题,直接上代码:

void fnLoopDemo()
{
	int i, j, k, l, m, n, x;

	for(i = 0; i < 10; i++)
	{
		j = 1;
		if(j)
		{
			k = 1;
			while(k)
			{
				l = 1;
				if(l)
				{
					for(m = 0; m < 5; m++)
					{
						x = 0;
					}
					for(n = 0; n < 5; n++)
					{
						x = 1;
					}
					x = 100;
					goto _cw;
				}
				x = 200;
_cw:
				__asm{}
			}
_bw:
			__asm{}
		}
	}
}


DASM结果如下:

void fnLoopDemo()
{
00416B00 55               push        ebp  
00416B01 8B EC            mov         ebp,esp 
00416B03 81 EC 14 01 00 00 sub         esp,114h 
00416B09 53               push        ebx  
00416B0A 56               push        esi  
00416B0B 57               push        edi  
00416B0C 8D BD EC FE FF FF lea         edi,[ebp-114h] 
00416B12 B9 45 00 00 00   mov         ecx,45h 
00416B17 B8 CC CC CC CC   mov         eax,0CCCCCCCCh 
00416B1C F3 AB            rep stos    dword ptr es:[edi] 
	int i, j, k, l, m, n, x;

	for(i = 0; i < 10; i++)
00416B1E C7 45 F8 00 00 00 00 mov         dword ptr [i],0 
00416B25 EB 09            jmp         fnLoopDemo+30h (416B30h) 
00416B27 8B 45 F8         mov         eax,dword ptr [i] 
00416B2A 83 C0 01         add         eax,1 
00416B2D 89 45 F8         mov         dword ptr [i],eax 
00416B30 83 7D F8 0A      cmp         dword ptr [i],0Ah 
00416B34 0F 8D 82 00 00 00 jge         _bw+5 (416BBCh) 
	{
		j = 1;
00416B3A C7 45 EC 01 00 00 00 mov         dword ptr [j],1 
		if(j)
00416B41 83 7D EC 00      cmp         dword ptr [j],0 
00416B45 74 70            je          _bw (416BB7h) 
		{
			k = 1;
00416B47 C7 45 E0 01 00 00 00 mov         dword ptr [k],1 
			while(k)
00416B4E 83 7D E0 00      cmp         dword ptr [k],0 
00416B52 74 63            je          _bw (416BB7h) 
			{
				l = 1;
00416B54 C7 45 D4 01 00 00 00 mov         dword ptr [l],1 
				if(l)
00416B5B 83 7D D4 00      cmp         dword ptr [l],0 
00416B5F 74 4D            je          fnLoopDemo+0AEh (416BAEh) 
				{
					for(m = 0; m < 5; m++)
00416B61 C7 45 C8 00 00 00 00 mov         dword ptr [m],0 
00416B68 EB 09            jmp         fnLoopDemo+73h (416B73h) 
00416B6A 8B 45 C8         mov         eax,dword ptr [m] 
00416B6D 83 C0 01         add         eax,1 
00416B70 89 45 C8         mov         dword ptr [m],eax 
00416B73 83 7D C8 05      cmp         dword ptr [m],5 
00416B77 7D 09            jge         fnLoopDemo+82h (416B82h) 
					{
						x = 0;
00416B79 C7 45 B0 00 00 00 00 mov         dword ptr [x],0 
					}
00416B80 EB E8            jmp         fnLoopDemo+6Ah (416B6Ah) 
					for(n = 0; n < 5; n++)
00416B82 C7 45 BC 00 00 00 00 mov         dword ptr [n],0 
00416B89 EB 09            jmp         fnLoopDemo+94h (416B94h) 
00416B8B 8B 45 BC         mov         eax,dword ptr [n] 
00416B8E 83 C0 01         add         eax,1 
00416B91 89 45 BC         mov         dword ptr [n],eax 
00416B94 83 7D BC 05      cmp         dword ptr [n],5 
00416B98 7D 09            jge         fnLoopDemo+0A3h (416BA3h) 
					{
						x = 1;
00416B9A C7 45 B0 01 00 00 00 mov         dword ptr [x],1 
					}
00416BA1 EB E8            jmp         fnLoopDemo+8Bh (416B8Bh) 
					x = 100;
00416BA3 C7 45 B0 64 00 00 00 mov         dword ptr [x],64h 
00416BAA EB 09            jmp         _cw (416BB5h) 
					goto _cw;
00416BAC EB 07            jmp         _cw (416BB5h) 
				}
				x = 200;
00416BAE C7 45 B0 C8 00 00 00 mov         dword ptr [x],0C8h 
_cw:
				__asm{}
			}
00416BB5 EB 97            jmp         fnLoopDemo+4Eh (416B4Eh) 
_bw:
			__asm{}
		}
00416BB7 E9 6B FF FF FF   jmp         fnLoopDemo+27h (416B27h) 
	}
}
00416BBC 5F               pop         edi  
00416BBD 5E               pop         esi  
00416BBE 5B               pop         ebx  
00416BBF 81 C4 14 01 00 00 add         esp,114h 
00416BC5 3B EC            cmp         ebp,esp 
00416BC7 E8 BF A5 FF FF   call        @ILT+390(__RTC_CheckEsp) (41118Bh) 
00416BCC 8B E5            mov         esp,ebp 
00416BCE 5D               pop         ebp  
00416BCF C3               ret              
--- 无源文件 -----------------------------------------------------------------------


在x = 100;这里,多了一条jmp跳转指令,怪哉怪哉!我项目代码多起来以后JMP的地址还不相同,搞得我都不知道是自己逻辑问题还是代码问题

抑或是性别问题,长相问题,人品问题,还是别的什么问题,其实微软很操蛋!

分享到:
评论

相关推荐

    libjpeg库的使用(VC6.0环境) 源码

    在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境中使用libjpeg库来将BMP图像转换并压缩为JPEG格式。libjpeg是一个开源库,专为处理JPEG(Joint Photographic Experts Group)图像格式而设计。这个库...

    汇编语言 vc语法分析器

    这两个报告可能包含了他们构建汇编语言语法分析器的过程记录,以及遇到的问题和解决方案。通过阅读和分析这些报告,我们可以学习到实际操作中可能遇到的技术细节,例如错误处理、优化性能、处理复杂语法结构等。 ...

    VC-ASM.rar_inline asm

    - **优势**:直接控制硬件,提高性能,处理特定硬件特性,解决C++无法直接处理的问题。 - **限制**:可移植性差,代码可读性降低,调试困难,过度使用可能导致代码维护难度增加。 4. **汇编指令的使用** 在内联...

    VC inline hook实例

    在VC++(Visual C++)环境中,inline hook是hook技术的一种,它通过在编译时替换目标函数的代码来实现功能注入,这种方式效率高且隐蔽性强。本文将深入探讨VC inline hook的原理、实现方式及其应用。 ### 1. inline...

    vc inline hook

    VC Inline Hook是一种在Visual C++环境下实现的代码注入技术,主要用于在不修改原函数代码的情况下,动态地改变程序的行为。这种技术通常应用于调试、性能监控、游戏修改等领域。以下是关于VC Inline Hook的一些详细...

    vcmasm.rar

    2. **语法与指令**:VCMASM支持标准的x86汇编语法,包括指令集如数据处理指令(如ADD、SUB)、跳转指令(如JMP、JE)、控制流指令(如CALL、RET)等。开发者需要熟悉这些指令的用法和功能。 3. **宏和伪指令**:...

    详细的游戏编程指南,从基础开始

    - **遗传算法**:模拟自然选择和遗传学原理解决问题的方法。 #### 九、三维图形编程 **9.1 概述** - **三维图形**:使用几何形状来模拟真实世界的物体。 **9.2 基本知识** - **9.2.1 初始化DXGraphics**:设置...

    缓冲区溢出攻击与防范(北大教材)

    - **1999年**:DarkSpyrit提出使用系统核心DLL中的Jmp ESP指令完成跳转,以及M.Conover关于基于堆的缓冲区溢出教程的出现,表明了攻击技术正向更加隐蔽和复杂的方向发展。 #### 缓冲区溢出攻击背景知识与技巧 有效...

    程序设计语言和编程环境

    1. **VC6.0**:Visual C++ 6.0是一款经典的C/C++开发环境,提供了集成的编辑、编译、调试等功能。虽然它已经较为老旧,但在某些场景下仍然被使用。 2. **POJ系统**:POJ(Problem Online Judge)是一个在线评测系统,...

    C语言做的系统(源代码)

    - **启动代码:** `_start`标签定义了启动点,通过跳转指令`jmp begin`实现。 - **系统初始化:** `cmain`函数负责初始化操作系统的各个组件,例如调用`InitShell()`函数初始化命令行界面。 - **系统退出:** 通过...

    libjpeg库配置和使用[借鉴].pdf

    此命令会调用`makefile.vc`来编译项目,同时执行`setup-vc6`脚本。 3. **工程配置** 在解压后的目录中找到`jpeg.dsw`工程文件,双击打开并在Visual Studio中构建它。 - 在工程的设置中选择`C/C++`-&gt;`Code ...

    libjpeg库配置和使用

    1. **修改编译选项**:在 `jpeg.dsw` 工程中,通过“工程 -&gt; 设置 -&gt; C/C++ -&gt; Code Generation”菜单,找到 “Processor” 和 “Use Run-Time Library” 两个选项,确保它们与你的主工程一致。 - 如果你的主工程...

    od脱壳软件破解工具

    其它不经常使用的加壳软体有ASPROTECT、PETITE 、NEOLITE、TELOCK等软体最多见的编程语言是Delphello,Visual Basic(略称VB),Visual C++(略称VC)了解些编程的常识,会让破解更加轻车熟道  底下来讲侦壳,此刻...

    libjpeg库配置和使用[归纳].pdf

    在Windows环境下,可以使用NMAKE工具,并且需要指定使用Visual C++环境的makefile文件(例如,fmakefile.vc)。在配置过程中,编译器可能会发出LNK4098错误,提示defaultlib"libcmt.lib"与其他库的使用存在冲突。...

Global site tag (gtag.js) - Google Analytics