1655839652 发表于 2017-2-5 05:24

感谢楼主分享,很详细

雪碧cc 发表于 2017-2-5 11:39

感谢楼主来学习怎么写call来了

万能的群主 发表于 2017-2-5 12:35

确实让我眼前一亮,吾爱汇编论坛可以学习很多

haier8917 发表于 2017-2-5 13:18

Shy 发表于 2016-12-14 13:10
不过还是问一下 retn 4表示有1个参数是为什么?4在16进制和10进制中也是4啊?那么原则上来说是有4个参的 ...

他在个RETN 4的意思其实真真的涵义应该是这样的,返回并释放堆栈空间:::你在对程序仔细研究的时候,便可以发现如下的现象,有些程序在进CALL的时候首先会对参数进行PUSH的,对吗,此时的PUSH是把参数压入到堆栈,并调用后面的CALL进行操作(比如计算,比较)对吧,当这些操作完后程序就会返回啦,如果这个参数在下个CALL里没用,那么,我们就要释放掉压入的参数在堆栈的空间,对吧,此时就用RETN n(注意,这个n其实表示释放多少个字节的堆栈空间(1个参数占4字节)),当然,也不用retn n,有些程序是在CALL前PUSH把参数压入堆栈,CALL内直接返回,出CALL后用ESP+n这样的方式进行释放空间的。。。。。他这样做的目的只有一个,堆栈平衡原则,另外你的这个问题retn 4表示有1个参数是为什么,我说下吧,因为在程序中,1个参数占4个字节,比如PUSH 12345678这个命令,你这样看push 压栈命令,12345678就是参数,我们把它分成字节的形式是这样的12 34 56 78,对吧,4个字节,也就是说1个参数4个字节,所以retn 4就是返回并释放4个字节(也就是返回并释放1个参数的堆栈空间),教程上说的就是返回1个参数,同理,你在某些程序上看到的retn 1C,1C换成10进制就是16+12=28,28/4=7,返回并释放28个字节(返回并释放7个参数的堆栈空间)

haier8917 发表于 2017-2-5 13:49

千里冰封 发表于 2016-12-14 18:34
我已经在新的回复可见中,加入了图文解释,请查看
同时想请教,这次写出来的易语言程序,除了 ...

你可以这样操作:::OD加载完程序后,CTRL+G,输入401000,然后右键查找,二进制字串,输入FF55FC5F5E回车,一般就可以找到他的按钮事件特征码

haier8917 发表于 2017-2-5 13:55

千里冰封 发表于 2016-12-14 19:33
这个特征码,我也试过了,找不到。

先要CTRL+G,转到401000处

千里冰封 发表于 2017-2-5 13:58

haier8917 发表于 2017-2-5 13:18
他在个RETN 4的意思其实真真的涵义应该是这样的,返回并释放堆栈空间:::你在对程序仔细研究的时候,便 ...

讲的很好{:6_215:}

千里冰封 发表于 2017-2-5 14:00

haier8917 发表于 2017-2-5 13:49
你可以这样操作:::OD加载完程序后,CTRL+G,输入401000,然后右键查找,二进制字串,输入FF55FC5F5E回 ...

感谢赐教{:5_123:}

gudoxxq 发表于 2017-2-5 14:00

讲的真好。谢谢!!

haier8917 发表于 2017-2-5 14:14

千里冰封 发表于 2016-12-14 19:41
因为我在写易语言程序的时候,已经写出来了。仔细看一下,
子程序1,是没有参数的
子程序2,有1个参数
...

这个RETN后面的数值不是与子程序所挂钩的,而是与进子程序之前的PUSH参数的个数所挂钩,比如在某个CALL进行操作(比如运算,比较)他需要两个参数,那么他就要在进CALL之前先push两个参数,在CALL里操作完准备返回的时候,这里有如下几种情况:1.之前压入的参数在后面的CALL没有作用,那么就可以在这里用retn 0x8(返回并释放8个字节(返回并释放两个参数)),也就是说带两个参数返回,如果这里直接retn,那么出CALL后就要使用esp+8,来释放掉这两个参数在内存里的空间因为push 12345678,我们这样理解,push压入(把参数压栈,后面的CALL好调用),12345678,我们分开来就是12 34 56 78,4个字节(1个参数4个字节),2.如果前面压入的参数在后面的CALL有作用,则这个CALL会直接返回,在后面的CALL执行完后在进行堆栈空间释放(或者说带参数返回)操作,这样的目的只有一个::::是程序的堆栈平衡原则,堆栈不平衡就会使程序的某个CALL的返回地址或者程序指针错误而崩溃的
页: 1 2 3 4 5 6 7 8 9 [10] 11 12 13 14 15 16 17 18 19
查看完整版本: 易语言信息框+基础逆向+写call