帮我看看这一小段代码

sanjiang 2003-05-28 04:00:05
:00402347 C745E000000000 mov [ebp-20], 00000000
:0040234E 8B4DE0 mov ecx, dword ptr [ebp-20]
:00402351 83C10A add ecx, 0000000A
:00402354 894DE0 mov dword ptr [ebp-20], ecx
:00402357 C745FC00000000 mov [ebp-04], 00000000
:0040235E 8B45E0 mov eax, dword ptr [ebp-20]
:00402361 99 cdq
:00402362 33C9 xor ecx, ecx
:00402364 F7F9 idiv ecx
:00402366 8945E0 mov dword ptr [ebp-20], eax
:00402369 EB0F jmp 0040237A
:0040236B 8B55E0 mov edx, dword ptr [ebp-20]
:0040236E 83C214 add edx, 00000014
:00402371 8955E0 mov dword ptr [ebp-20], edx
:00402374 B87A234000 mov eax, 0040237A
:00402379 C3 ret

以上是下面这段C程序的反汇编形式:
int i = 0;
i=i+10;
try
{
i = 0;
i = i/0;
}
catch(...)
{
i = i+20;
}
我只是想问问上面这段汇编是怎么将除零跳转到i=i+20的。
...全文
48 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanjiang 2003-05-28
  • 打赏
  • 举报
回复
这样啊,谢过!
BraveHeart2222 2003-05-28
  • 打赏
  • 举报
回复
fs是用来存放TIB(线程信息块)地址的,其中fs:[0]就指向异常处理程序链。
在C++的源程序中,若有
Try
{
...
}
catch()
{...}
这些语句,编译器就会设置fs:[0]指向上述代码的catch地址处(在上面是0040236B),同时会保存原来的异常处理程序地址,这就形成了一个异常程序处理链,这样当上面代码中的idiv ecx指令执行时,若出现除0异常,就会调用异常处理程序(就是与catch{}相对应的代码段)

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧