10 2021 档案
摘要:有一个问题,怎么用其它指令实现push操作。 第一步看一下push操作具体干了什么事情。 查看intel指令手册 先让esp-4,然后把操作数写到[esp]这个地方。 第二步看影响的标志位。 手册说不影响标志位。 第一步是让esp-4,这个比较简单,lea esp,esp-4 lea指令不影响标志位
阅读全文
摘要:float是占用四个字节,double是栈用8个字节的。 float a=5; double b=5; printf("%lf",a+b); return 0; 对应的汇编代码 00401028 |. C745 FC 0000A>mov [local.1],0x40A00000 0040102F |
阅读全文
摘要:我们写一个函数,里面必然会用到变量,每个变量都会占用内存,这些内存分成三个种类。 第一个是栈内存,函数内部局部变量是栈内存。栈内存不用我们手动管理,在调用完函数之后 函数会自动释放栈内存。实际上就是函数末尾被编译器添加的mov esp,ebp和pop ebp。 栈内存的大小是有两个大小,一个是res
阅读全文
摘要:lea指令是取得源操作数的地址到目的操作数,lea指令的格式只支持 lea r16/r32 ,[mem]这种形式,也就是目的操作数只能是寄存器,源操作数只能是内存操作数。 还有几种特殊的形式。 假如源操作数是32位的,目的操作数是16位的。 类似下面这种 lea ax,word ptr ss:[ed
阅读全文
摘要::00401008 E801000000 call 0040100E:0040100D C3 ret call 0040100E的机器码是E801000000,E8是CALL指令的opcode,后面的0100 0000是怎么和0040100e对应起来的。 其实01000000这是一个相对地址,并不是
阅读全文
摘要:ret是retn和retf的助记符表达。 retn是return near的意思,段内返回。retf是return far 段间返回 retn的操作有两部 第一步把[esp]复制到EIP中。 第二步esp +4 retn param 这种带参数的,比如retn 0x16 第一步还是把[esp]复制到
阅读全文
摘要:在一个delphi程序中看到这样一句代码,有点蒙。它是在push ebp,mov ebp,esp的后面的,平常都是sub esp,xx之类的。后来突然想明白了,0ffffff0这不就是一个有符号数麻,对应的十进制数就是 -16 ,也就是相当于sub esp,16
阅读全文
摘要:unk就是unknown的意思,未知。
阅读全文
摘要:在IDA中看到这样一个函数。 call @System@@LStrClr$qqrpv ; System::__linkproc__ LStrClr(void *) 这是delphi里面的系统函数,@System@@LStrClr$qqrpv 这个名字很奇怪,后来我看懂了。 Ststen这是类名,LS
阅读全文
摘要:or eax, eax ; 判断eax是否为0 jnz short loc_41A7D1 今天看到这样一段代码。 or是或操作。eax无非两种情况,0和非0,当eax是0,or之后的结果还是0,置ZF为1。当eax是非0,or之后的结果还是非0。ZF为0。 意思就是如果eax不是0则跳转。
阅读全文
摘要:打开ida之后ctrl+w保存idb文件,发现被拒绝。我以为是管理员权限的问题,测试发现还是依旧,最后发现是dropbox再上传东西,如果它在上传一个文件,你是不能写入这个文件的。 关闭dropbox即可。
阅读全文