汇编的前辈们帮忙指导下。
addesp,10movecx,eaxtestecx,ecxje098bda7fmoveax,[ecx+24]testeaxeaxje098bda7f098bda7fmo...
add esp , 10
mov ecx,eax
test ecx,ecx
je 098bda7f
mov eax,[ecx+24]
test eax eax
je 098bda7f
098bda7f mov edi,[ebp-18]
这段代码该如何去理解? 主要是跳转的地方理解不了。 展开
mov ecx,eax
test ecx,ecx
je 098bda7f
mov eax,[ecx+24]
test eax eax
je 098bda7f
098bda7f mov edi,[ebp-18]
这段代码该如何去理解? 主要是跳转的地方理解不了。 展开
展开全部
//前面很可能是一个CALL语句,进行函数调用,
add esp , 10//CALL调用完,平堆栈
mov ecx,eax //eax是函数调用的返回值
test ecx,ecx
je 098bda7f//检测函数返回值,返回值应该是一个结构体指针或者类对象指针,若是NULL则跳转
mov eax,[ecx+24]
test eax eax //检测返回值的结构体指针或者类对象指针,它指向的成员粗袭变量,若是0则跳转
je 098bda7f
098bda7f mov edi,[ebp-18]
大概含义是:
eax =func();//函数返回值
ecx = eax;
if(ecx ==NULL) jmp 098bda7f//若函数返岩嫌兄回值为NULL,则跳转
if(ecx->b==0) jmp 098bda7f//若函数返回值不者山空,则判断其成员变量(结构体变量)是否为0,是则跳转
add esp , 10//CALL调用完,平堆栈
mov ecx,eax //eax是函数调用的返回值
test ecx,ecx
je 098bda7f//检测函数返回值,返回值应该是一个结构体指针或者类对象指针,若是NULL则跳转
mov eax,[ecx+24]
test eax eax //检测返回值的结构体指针或者类对象指针,它指向的成员粗袭变量,若是0则跳转
je 098bda7f
098bda7f mov edi,[ebp-18]
大概含义是:
eax =func();//函数返回值
ecx = eax;
if(ecx ==NULL) jmp 098bda7f//若函数返岩嫌兄回值为NULL,则跳转
if(ecx->b==0) jmp 098bda7f//若函数返回值不者山空,则判断其成员变量(结构体变量)是否为0,是则跳转
展开全部
你说你跳转的地方不理解,我想应该是对test ecx,ecx和贺蚂test eax eax 不太理解吧?
test指令是把目标操作数与源操作数进行‘与缺丛’操作,影响一些标志位,如ZF。test ecx,ecx 是测试ecx 积存器的值是否为0,等于0则跳转。test指令有点象and指令,只不过and指令在影响标志位的时候同时还改变目标操作数的值,而test指令只影响标志位。
我禅扮埋说的你可理解?嘿嘿。。。
test指令是把目标操作数与源操作数进行‘与缺丛’操作,影响一些标志位,如ZF。test ecx,ecx 是测试ecx 积存器的值是否为0,等于0则跳转。test指令有点象and指令,只不过and指令在影响标志位的时候同时还改变目标操作数的值,而test指令只影响标志位。
我禅扮埋说的你可理解?嘿嘿。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你就把098bda7f当成标号就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询