为什么我只在内存里面看到了push命令,没有看到pop命令?
为什么我只在内存里面看到了push命令,没有看到pop命令? 你没有看到?不可能吧,除非程序用汇编写的,并且很有赖性的把所有的POP命令修改成具有同等作用的多句命令代码,但我想这几乎是不可能的,因为这没有什么作用阿! 在od里面,确实没有看到pop呀!做了好多crackme,就是没有看到pop呀!
你不信呀!
所以我分析程序时感到很茫然!不知道怎么下手!
还有就是call的入口参数我也看不出来! 不是吧!
call 的参数可以是压入堆栈中的东西,也可以是寄存器里面的数据。一般在调用的前面,在OD里面可以显示部分API和VC的参数 有没有POP你现在没有必要去琢磨!SP是可调整的。如果不需要从堆栈中返回数据和平衡的话就不会出现拉
你做过这个板块的CRACKME没有?
[ Last edited by 东方青石 on 2005-6-17 at 12:27 PM ] 堆栈这个东东实在是搞不懂!
那就贴上些代码!pyg新手入会的crackme的片断!
0040847A .51 push ecx
0040847B .8D85 04FFFFFF lea eax,dword ptr ss:
00408481 .52 push edx
00408482 .50 push eax
00408483 .8D8D 14FFFFFF lea ecx,dword ptr ss:
00408489 .6A 40 push 40
0040848B .51 push ecx
0040848C .FF15 34104000 call dword ptr ds:[<&MSVBVM60.#595>;MSVBVM60.rtcMsgBox
00408492 .8D95 E4FEFFFF lea edx,dword ptr ss:
00408498 .8D85 F4FEFFFF lea eax,dword ptr ss:
0040849E .52 push edx
0040849F .8D8D 04FFFFFF lea ecx,dword ptr ss:
004084A5 .50 push eax
004084A6 .8D95 14FFFFFF lea edx,dword ptr ss:
004084AC .51 push ecx
004084AD .52 push edx
都是push,就没有pop! 因为它不需要用堆栈传回数据阿!是不是? 那么看来,在这里堆栈的作用只是用来传送数据了! 要是有CAll前面出现的话,只是给CALL传递参数了! 但也可能是为了保护寄存器中的数据!不全是作为参数的,要注意!
作为保护的话,就会有POP了
页:
[1]
2