1.32bit的寄存器比如EAX的低八位能是AX,AX又可以分出AH,AL,那EAX的高八位就不能单独使用了?
:::EAX低16位是AX EAX高8位没有对应的寄存器,可以通过指令获取其值..
2.TEST和CMP区别: 这种能百度的答案我自然会去百度,TEST相当于不保存结果的AND而CMP相当于不保存结果的SUB,目前是看过TEST检测寄存器是否为空.
:::随便找本大学汇编教材上面有解释...
3.如何找子函数?从一个retn往上找的第一个ret之前就是一个子函数吗?
:::这个不一定,如果函数有很多处返回,有多个ret怎么办,按你这么找就行不通了,这个靠积累...
4.教程中说到:
引用:
LOOP指令可以帮我们完成前面例子中的事情- 将计数器ECX的值减1,判断ECX的值是否为0,如果为0就跳转到指定的地址-将像前面的例子一样。
个人觉得好像不对,不是如果ECX不为1才跳转吗?
:::ECX你可以理解为高级语言中的循环变量i,随便找本大学汇编教材上面也有解释...
5.
引用:
在这里新手普遍会犯一个错误,现在单击鼠标右键选择-Search for-Name(label)in current module。这个时候我们得到的函数名称是USER32.DLL库中的函数名称,并不是我们的CrackMe主程序的导入表中的函数名。菜单项中明确指出是搜索当前模块,我们现在这种情况,当前模块是USER32,因此MessageBoxA是位于该模块当中的
这句话说的是什么意思?我们看到的是的User32.dll函数表?我们调试的不是Crackme吗?还是说他显示的是CrackMe引用的来自User32.dll的函数?
:::程序会调用系统dll例如User32.dll中函数,如果你在MessageBoxA这个函数里面查看当前模块的函数列表,
显示的当然是User32.dll的函数呀,因为MessageBoxA的实现代码是在User32.dll这个模块中的嘛.
6.教程9中神一样地看出这段代码是检测字母的,如何做到?要学多久才有这种水平...我只能按着教程一步步做...硬着头皮只猜出了大小写转换的一段..."搞定"了这个CM之后兴冲冲地去找一些简单的CM..却发现连自己写的程序都破不了啊...
:::教程只是抛砖引玉的作用,要提高分析算法的能力,得靠自己多加练习了...
7.希望自己坚持下去.
不能完全指望教程...,教程只是辅导的作用,练习才是王道...如果我5年前看老外的教程的话,
我或许也有你这些疑问... 过来5,6年,现在来翻译这些教程,我可以很容易理解作者讲的这些东西,
这些东西由于之前的练习,在脑海中已经形成了思维定式,所以作者这么讲,我会觉得理所当然...
所以自己独立思考,多实践,多问,时间长了,你的这些疑问会逐渐消失...
你提的这些问题很好,我刚学的时候也有你这些疑问,我当时问我老师的时候,他会奇怪这么简单的问题
你都不会,呵呵,殊不知初学者有这样的问题很正常...
加油,能坚持下去,就能学会
前两个星期,在整工作上的问题,没有更新翻译,明天继续更新15章