摘要:
51的栈是向高地址增长,INTEL的8031、8032、8048、8051系列使用向高地址增长的堆栈;但同样是INTEL,在x86系列中全部使用向低地址增长的堆栈。其他公司的CPU中除ARM的结构提供向高地址增长的堆栈选项外,多数都是使用向低地址增长的堆栈。在没有MMU的时代,为了最大的利用内存空间,堆和栈被设计为从两端相向生长。那么哪一个向上,哪一个向下呢?人们对数据访问是习惯于向上的,比如你在堆中new一个数组,是习惯于把低元素放到低地址,把高位放到高地址,所以堆向上生长比较符合习惯。而栈则对方向不敏感,一般对栈的操作只有PUSH和pop,无所谓向上向下,所以就把堆放在了低端,把栈放在了高 阅读全文
随笔分类 - 汇编
integer promotion
2013-03-17 20:46 by 放作夥, 335 阅读, 收藏, 编辑
摘要:
用小米的笔试题来举例吧1 void fun() 2 { 3 unsigned int a = 2013; 4 int b = -2; 5 int c = 0; 6 while (a + b > 0) 7 { 8 a = a + b; 9 c++; 10 } 11 printf("%d", c); 12 } 问输出什么?错误答案是1003,参考解释如下If both operands have the same type, then no further convers... 阅读全文
注册算法入门
2012-10-16 20:49 by 放作夥, 454 阅读, 收藏, 编辑
摘要:
上网下了个crackme,传说中的方法都不行,难道那些教程都坑爹。突发奇想重下了个OD,发现注释功能强了N倍,多了很多api注释,看着舒服多了,汇编句子也更容易理解了,建议大家如果感觉费劲可以下个diy过的od。下面是关键处的od里的汇编代码(根据输入的name算出序列号):004011C1 |> /6A 32 /push 0x32 ; /Count = 32 (50.)004011C3 |. |68 84624000 |push crackme2.00406284 ; |Buffer = crackme2.00406284,说明name字符串放在了00... 阅读全文
call传参之通过堆栈
2012-10-15 19:53 by 放作夥, 666 阅读, 收藏, 编辑
摘要:
常见的调用约定有:【例】按__stdcall约定调用函数test2(Par1,Par2)pushpar2;参数2pushpar1;参数1calltest2;{pushebp;保护现场原先的EBP指针,BP为基指(Base Pointer)寄存器,用它可直接存取堆栈中的数据,它的作用是在调用函数时保存ESP使函数结束时可以正确返回;加E(enhance)代表增强型寄存器,用于32位数据处理,类似AX与AL,AH的关系movebp,esp;设置新的EBP指针,指向栈顶moveax,[ebp+0C];调用参数2movebx,[ebp+08];调用参数1subesp,8;若函数要用局部变量,则要在堆栈 阅读全文
esp定律的一点说明
2012-10-15 17:47 by 放作夥, 219 阅读, 收藏, 编辑
摘要:
网上说的esp定律脱壳时都说到“当esp变红时下访问断点”却没说明为什么,其实od当寄存器变化时就会变红,也就是说实质是留意堆栈什么时候变化。 而把壳当成一个call,当调用壳这个call时会压栈,esp变红。 阅读全文
winhex注意
2012-10-13 22:11 by 放作夥, 324 阅读, 收藏, 编辑
摘要:
第一次用winhex,发现复制时不对,搜了一下,提示粘贴时要选最后一项,即ascii hex。另外如果如果有一件东西不想直接交给对方,就可以给对方16进制的代码让对方粘贴进winhex中再保存,也是相当于传送的效果,但是没给实物,相对较安全 阅读全文
输入字符串长度
2012-10-13 10:46 by 放作夥, 250 阅读, 收藏, 编辑
摘要:
问:答:在内存中一个String方法的格式都是:SIze+内容。如果String定义的时候带packed关键字,那么Size是一个Byte,如果不带,那么是DWord。在高级语言中,定义一个String类型的参数。在Push进Call里面的时候。都是 压入 String的第一个字符的地址。所以,Esi的地址就是第一个字符的地址,而这个地址 -4就是Size。如果带packed,那么Esi-1就是Size。 阅读全文
逆向工程——注册篇
2012-07-26 19:27 by 放作夥, 461 阅读, 收藏, 编辑
摘要:
共享软件要注册,于是很多人动了歪主意,然后美其名日——逆向工程。用“网络填表终结者(共享软件)”做例子简单介绍一下。下载了网络填表终结者后用langague.exe侦壳发现加的是aspack壳用aspcakdie脱壳后,就可以对它进行注册破解了。要达到免注册的目的可以有很多方式,简单介绍一下。1、 爆破先注册一下,用win32dasm反汇编一下下载的网络填表终结者的主程序FormGhost.exe,找到参考字符串(注册码错误),向上看代码发现call。。。jne。。。语句,这是一种经典的垃圾算法,意思就是跟正确注册码对比,如果错误则跳转到错误提示处(jump not equal---jne), 阅读全文