随笔分类 -  程序逆向

摘要:1,结构体中内存的对齐 将结构体中数据位置换一下: 2,结构体中含有结构体的内存对齐 该结构中占用最大空间的类型所占用的字节数,此例子中占最大空间为嵌套结构体中的double类型8字节 3,含有位域的内存对齐 含有位域内存对齐1、相邻字段类型相同,他们位宽的和不大于字段类型,存储位置紧挨着。2、相邻 阅读全文
posted @ 2019-08-27 14:05 狂奔~
摘要:输出:sizeof testClass=8,num = 100 没有虚函数时,test变量在内存中的分布 若存在虚函数 我们用IDA打开看一下反汇编 对象作为返回值1、分配一个临时对象空间 main_object;2、把临时对象入栈3、调用返回局部对象的函数 在返回局部对象的函数里面fun_obje 阅读全文
posted @ 2019-08-23 15:00 狂奔~
摘要:静态局部量xor eax,eax // 将eax清零mov al,mem //mem用于标记静态变量是否被被初始化,初始化为1,未初始化为0and eax,1 // 与 1 操作test eax,eaxjnz XXXX //XXXX的地方表示跳过初始化 mov cl,mem or cl,1 // 或 阅读全文
posted @ 2019-08-18 10:26 狂奔~
摘要:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,S 阅读全文
posted @ 2019-08-17 14:55 狂奔~
摘要:全局变量与局部变量作用域全局变量1、作用于所在的模块。2、在PE结构中,全局变量位于.data节3、通过立即数寻址。 局部变量1、与所在函数的作用域一样。2、所在地址为栈上。3、通过EBP或ESP进行寻址。 阅读全文
posted @ 2019-08-17 14:26 狂奔~
摘要:https://www.cnblogs.com/LittleRedPoint/p/4009115.html 阅读全文
posted @ 2019-08-14 23:26 狂奔~
摘要:函数调用cdcel 参数从右向左依次入栈 参数一参数二......call...add esp,xxx 返回地址入栈保存EBP局部变量分配空间 stdcall 堆栈被调用都自己恢复 上面程序在test()函数中输入值,在main函数中打印出来 阅读全文
posted @ 2019-08-14 22:56 狂奔~
摘要:本文链接:https://blog.csdn.net/ypist/article/details/8467163今天读代码时,忽然跳出如下一条指令==>>汇编代码: rep stos dword ptr es:[edi] 在网上查了相关资料显示:/************************** 阅读全文
posted @ 2019-08-14 00:01 狂奔~
摘要:一,关于有没有加上[]的问题 1,对于mov指令来说: 有没有[]对于变量是无所谓的,其结果都是取值 如: num dw 2 mov bx,num mov cx,[num];bx=cx=2 对于寄存器而言,有[]表示取地址,没[]表示取值 如: num dw 2 mov ax,num mov bx, 阅读全文
posted @ 2019-08-11 23:15 狂奔~ 阅读(1006) 评论(0) 推荐(0)
摘要:dword 双字 就是四个字节ptr pointer缩写 即指针[]里的数据是一个地址值,这个地址指向一个双字型数据比如mov eax, dword ptr [12345678] 把内存地址12345678中的双字型(32位)数据赋给eax 8086CPU的指令,可以处理两种尺寸的数据,byte和w 阅读全文
posted @ 2019-08-11 22:53 狂奔~
摘要:https://www.cnblogs.com/xiangtingshen/p/11014514.html C++函数调用约定_cdecl约定:参数:从右向左依次入栈堆栈平衡:调用方平衡 函数内部 push 参数一 //参数入栈顺序:从右向左依次入栈push 参数二push 。。。push 参数Nc 阅读全文
posted @ 2019-08-04 18:12 狂奔~ 阅读(384) 评论(0) 推荐(0)
摘要:do while 效率是最高的 用ida打开 while debug版本 release版本,编译器对while语句进行优化,优化成do while结构 for 效率比较低 debug 同样编译器对release版本,将for循环优化为 do while 结构 阅读全文
posted @ 2019-08-04 16:50 狂奔~ 阅读(450) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/u014421422/article/details/79471396 esp是栈指针,是cpu机制决定的,push、pop指令会自动调整esp的值; ebp只是存取某时刻的esp,这个时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通 阅读全文
posted @ 2019-07-21 15:10 狂奔~
摘要:编译器使用的优化技巧 a、1. 变量优化 b、加法的优化 变量+变量 = lea reg32,[变量+变量] 变量+变量 = add eax,xx 变量+常量 = add 变量+常量 变量+1 = inc 变量 b、减法的优化 变量-变量 = lea reg32,[变量-变量] 变量-变量 = su 阅读全文
posted @ 2019-07-19 13:43 狂奔~
摘要:有符号div,无符号idiv 标 题: 【原创】第一章:1.9、除法与取模运算的识别与优化原理 作 者: AOnePass 时 间: 2010-09-02,23:59:39 链 接: http://bbs.pediy.com/showthread.php?t=119744 在计算机的0和1的世界里, 阅读全文
posted @ 2019-07-10 20:58 狂奔~
摘要:无符号mul和有符号imul,在编译的过程中,先尝试将乘法转换成加法 或使用移位指令等周期转移较短的指令,如果都没有才用乘法指令 Debug版本反汇编: release版本通过ida查看 阅读全文
posted @ 2019-07-10 14:00 狂奔~
摘要:#pragma comment ( lib,"wpcap.lib" ) 表示链接wpcap.lib这个库。和在工程设置里写上链入wpcap.lib的效果一样(两种方式等价,或说一个隐式一个显式调用),不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了。告诉连接器连接的时 阅读全文
posted @ 2019-07-04 14:24 狂奔~
摘要:有符号数 有符号整数中用来表示符号的是最高位,最高位为0表示正数,最高位为1表示负数。在内存中同样占4个字节,由于最高位为符号位,不能用于表示数值,因些有符号整数的取值范围要比无符号数取值范围少1位, 既0x80000000~0x7FFFFFFF; 负数在内存中都是以补码的形式存放。 补码: 正数的 阅读全文
posted @ 2019-07-03 19:18 狂奔~
摘要:mov ecx,30mov eax,0cccccccchrep stos dword prt es:[edi]stos指令,它的功能是将eax中的数据放入的edi所指的地址中,同时,edi会增加4个字节,rep使指令重复执行ecx中填写的次数。方括弧表示存储器,这个地址实际上是edi的内容所指向的地 阅读全文
posted @ 2019-06-26 19:19 狂奔~
摘要:几个常用的寄存器 sp/esp/rsp(16bit/32bit/64bit)栈寄存器 指向栈顶 bp/ebp/rbp 栈基址寄存器 指向栈底 ip/eip/rip 程序指令寄存器 指向下一条待执行指令 通用寄存器 数据寄存器组: EAX, EBX, ECX, EDX,ABCD都是32位数据寄存器,E 阅读全文
posted @ 2019-06-26 14:17 狂奔~