从汇编中看出未初始化可能引起的错误
2010-10-19 23:37
405 查看
这个标题可能定义的不是很明确,在VS2005中看到的汇编代码可以看出,没有对循环变量i进行初始化或者赋初值的情况比起有的情况会多几条不同的汇编指令。这一点自己也不是很明白,但可以肯定的是我们不能够犯这么低级的错误。如果可以,欢迎提出见解。详情看代码:
代码
3 8: int c = a + b;
4 0041328E mov eax,dword ptr [a]
5 00413291 add eax,dword ptr [b]
6 00413294 mov dword ptr [c],eax
7 9: int i = 0; //对i进行初始化
8 00413297 mov dword ptr [i],0
16 17: do {
17 18: c += i;
18 0041329E mov eax,dword ptr [c]
19 004132A1 add eax,dword ptr [i]
20 004132A4 mov dword ptr [c],eax
21 19: i++;
22 004132A7 mov eax,dword ptr [i]
23 004132AA add eax,1
24 004132AD mov dword ptr [i],eax
25 20: } while ( c < 100 );
26 004132B0 cmp dword ptr [c],64h
27 004132B4 jl myfunction+2Eh (41329Eh)
31 8: int c = a + b;
32 00413295 mov eax,dword ptr [a]
33 00413298 add eax,dword ptr [b]
34 0041329B mov dword ptr [c],eax
35 9: int i; //未进行初始化的
43 17: do {
44 18: c += i;
45 0041329E cmp byte ptr [ebp-0DDh],0
46 004132A5 jne myfunction+44h (4132B4h)
47 004132A7 push offset (413300h)
48 004132AC call @ILT+165(__RTC_UninitUse) (4110AAh)
49 004132B1 add esp,4
50 004132B4 mov eax,dword ptr [c]
51 004132B7 add eax,dword ptr [i]
52 004132BA mov dword ptr [c],eax
53 19: i++;
54 004132BD cmp byte ptr [ebp-0DDh],0
55 004132C4 jne myfunction+63h (4132D3h)
56 004132C6 push offset (413300h)
57 004132CB call @ILT+165(__RTC_UninitUse) (4110AAh)
58 004132D0 add esp,4
59 004132D3 mov eax,dword ptr [i]
60 004132D6 add eax,1
61 004132D9 mov byte ptr [ebp-0DDh],1
62 004132E0 mov dword ptr [i],eax
63 20: } while ( c < 100 );
64 004132E3 cmp dword ptr [c],64h
65 004132E7 jl myfunction+2Eh (41329Eh)
68 9: int i;
69 10: i = 0; //赋值操作
70 00413297 mov dword ptr [i],0
78 18: do {
79 19: c += i;
80 0041329E mov eax,dword ptr [c]
81 004132A1 add eax,dword ptr [i]
82 004132A4 mov dword ptr [c],eax
83 20: i++;
84 004132A7 mov eax,dword ptr [i]
85 004132AA add eax,1
86 004132AD mov dword ptr [i],eax
87 21: } while ( c < 100 );
88 004132B0 cmp dword ptr [c],64h
89 004132B4 jl myfunction+2Eh (41329Eh)
代码
3 8: int c = a + b;
4 0041328E mov eax,dword ptr [a]
5 00413291 add eax,dword ptr [b]
6 00413294 mov dword ptr [c],eax
7 9: int i = 0; //对i进行初始化
8 00413297 mov dword ptr [i],0
16 17: do {
17 18: c += i;
18 0041329E mov eax,dword ptr [c]
19 004132A1 add eax,dword ptr [i]
20 004132A4 mov dword ptr [c],eax
21 19: i++;
22 004132A7 mov eax,dword ptr [i]
23 004132AA add eax,1
24 004132AD mov dword ptr [i],eax
25 20: } while ( c < 100 );
26 004132B0 cmp dword ptr [c],64h
27 004132B4 jl myfunction+2Eh (41329Eh)
31 8: int c = a + b;
32 00413295 mov eax,dword ptr [a]
33 00413298 add eax,dword ptr [b]
34 0041329B mov dword ptr [c],eax
35 9: int i; //未进行初始化的
43 17: do {
44 18: c += i;
45 0041329E cmp byte ptr [ebp-0DDh],0
46 004132A5 jne myfunction+44h (4132B4h)
47 004132A7 push offset (413300h)
48 004132AC call @ILT+165(__RTC_UninitUse) (4110AAh)
49 004132B1 add esp,4
50 004132B4 mov eax,dword ptr [c]
51 004132B7 add eax,dword ptr [i]
52 004132BA mov dword ptr [c],eax
53 19: i++;
54 004132BD cmp byte ptr [ebp-0DDh],0
55 004132C4 jne myfunction+63h (4132D3h)
56 004132C6 push offset (413300h)
57 004132CB call @ILT+165(__RTC_UninitUse) (4110AAh)
58 004132D0 add esp,4
59 004132D3 mov eax,dword ptr [i]
60 004132D6 add eax,1
61 004132D9 mov byte ptr [ebp-0DDh],1
62 004132E0 mov dword ptr [i],eax
63 20: } while ( c < 100 );
64 004132E3 cmp dword ptr [c],64h
65 004132E7 jl myfunction+2Eh (41329Eh)
68 9: int i;
69 10: i = 0; //赋值操作
70 00413297 mov dword ptr [i],0
78 18: do {
79 19: c += i;
80 0041329E mov eax,dword ptr [c]
81 004132A1 add eax,dword ptr [i]
82 004132A4 mov dword ptr [c],eax
83 20: i++;
84 004132A7 mov eax,dword ptr [i]
85 004132AA add eax,1
86 004132AD mov dword ptr [i],eax
87 21: } while ( c < 100 );
88 004132B0 cmp dword ptr [c],64h
89 004132B4 jl myfunction+2Eh (41329Eh)
相关文章推荐
- Java运行时环境初始化时出现错误,你可能需要重新安装Flash(CS5)
- wcf 使用net.tcp 服务器未提供有意义的回复;这可能是由协定不匹配、会话过早关闭或内部服务器错误引起的
- 可能引起「We Were Unable to Load Disqus」错误的一种情况分析
- 由“警告:检测到时钟错误。您的创建可能是不完整的。”引起的!
- win7下,安装Framework4.0后仍然报Framework初始化错误,且"打开或关闭WINDOWS功能"为空白的可能原因
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- wcf 使用net.tcp 服务器未提供有意义的回复;这可能是由协定不匹配、会话过早关闭或内部服务器错误引起的
- arcsde objectid 编号是从1开始的,从0开始有可能引起多种显示错误
- c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针
- 变量未初始化引起的release错误
- .net WCF 套接字连接中断,可能是由于消息处理错误,或者远程宿主接受超时引起,或者是底层网络资源问题导致,本地套接字时间
- 解决:flash cs5运行时出现“java运行时环境初始化时出现错误,你可能需要重装Flash”
- 关于ORACLE可能引起数字类型错误的原因之一
- 汇编日记之忽略PTR引起的错误
- Verilog变量位宽定义的两种方式及差别和可能引起的错误
- Win7 线程语言设置错误可能引起窗口排版变化
- Java运行时环境初始化时出现错误,你可能需要重装Flash
- 在函数里分配过大数组可能引起的错误
- Sqlserver 2005 配置 数据库镜像:1418错误:该错误很可能是安全方面的配置问题引起的
- mysql 1037 hy001错误可能引起的原因