brightsm 发表于 2005-6-14 21:46:12

为什么我只在内存里面看到了push命令,没有看到pop命令?

为什么我只在内存里面看到了push命令,没有看到pop命令?

东方青石 发表于 2005-6-16 06:46:19

你没有看到?不可能吧,除非程序用汇编写的,并且很有赖性的把所有的POP命令修改成具有同等作用的多句命令代码,但我想这几乎是不可能的,因为这没有什么作用阿!

brightsm 发表于 2005-6-16 15:31:08

在od里面,确实没有看到pop呀!
做了好多crackme,就是没有看到pop呀!
你不信呀!
所以我分析程序时感到很茫然!不知道怎么下手!
还有就是call的入口参数我也看不出来!

东方青石 发表于 2005-6-17 12:01:06

不是吧!
call 的参数可以是压入堆栈中的东西,也可以是寄存器里面的数据。一般在调用的前面,在OD里面可以显示部分API和VC的参数

东方青石 发表于 2005-6-17 12:05:02

有没有POP你现在没有必要去琢磨!SP是可调整的。如果不需要从堆栈中返回数据和平衡的话就不会出现拉
你做过这个板块的CRACKME没有?

[ Last edited by 东方青石 on 2005-6-17 at 12:27 PM ]

brightsm 发表于 2005-6-17 15:19:46

堆栈这个东东实在是搞不懂!
那就贴上些代码!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!

东方青石 发表于 2005-6-21 20:32:57

因为它不需要用堆栈传回数据阿!是不是?

brightsm 发表于 2005-6-22 00:53:08

那么看来,在这里堆栈的作用只是用来传送数据了!

brightsm 发表于 2005-6-22 00:54:55

要是有CAll前面出现的话,只是给CALL传递参数了!

东方青石 发表于 2005-6-22 06:30:19

但也可能是为了保护寄存器中的数据!不全是作为参数的,要注意!
作为保护的话,就会有POP了
页: [1] 2
查看完整版本: 为什么我只在内存里面看到了push命令,没有看到pop命令?