zoukankan      html  css  js  c++  java
  • 堆区中字符串压栈顺序


    对于栈中压入字符串请看:

    http://blog.csdn.net/zcc1414/article/details/9668907

    对于堆中压入字符串 也就是

    mov 堆,数据


    下面为例子:

    int main()
    {
    	__asm
    	{
    		push ebp
    		mov ebp,esp
    		xor ebx,ebx
    		push ebx
    		//尾部要加上 '' 也就是 0x00
    		//如果是PUSH 的话 留整齐的4字节在后面
    		//user32.dll   字符串转换为16进制为:
    		//75,73,65,72,33,32,2E,64,6C,6C
    
    		mov byte ptr [esp],0x6C	    //第一个"l"
    		mov byte ptr [esp+1],0x6C	//第二个"l"
    		push 0x642E3233     //"32.d"
    		push 0x72657375		//"user"
    
    		//可以看得出  mov 堆,数据  
    		//这种方式是  取字符串前多少字节  然后逆序mov入堆中  所以最后要mov入 空
    
    		//push 数据  这种方式将整行字符串倒叙压入  
    
    		mov eax,esp
    		push eax
    		//mov ebx,0x7C801D77 xp sp2
    		mov ebx,0x7C801D7B  //xp sp3
    		call ebx		//LoadLibrary
    		sub esp,0x80
    		mov dword ptr [ebp-34h],0xBECAE1CC
    		mov byte ptr [ebp-30h],0x00
    		lea esi,[ebp-34h]  //提示
    		
    		
    		//报告:0day by Panda     字符串直接转换为16进制为:
    		//B1A8,B8E6,3A,30,64,61,79,20,62,79,20,50,61,6E,64,61
    
    		//这里是堆的 对字符串的传送方式
    		mov dword ptr [ebp-16h],0xE6B8A8B1 //"报告"
    		mov dword ptr [ebp-12h],0x3a	   //":"
    		mov dword ptr [ebp-11h],0x30	   //"0"  这里是为了配合后面4字节
    
    		mov dword ptr [ebp-10h],0x20796164  //"day " 注意后面有一空格
    		mov dword ptr [ebp-0ch],0x50207962  //"by P"
    		mov dword  ptr [ebp-8h],0x61646E61	//"anda"
    		mov byte  ptr [ebp-4h],0x00		    // 这里最重要  结尾
    		lea edi,[ebp-16h]
    		push 1
    		push esi
    		push edi
    		push 0
    		//mov eax,0x77D5058A  //xp sp2
    	    mov eax,0x77D507EA  //xp sp3
    		call eax
    		mov esp,ebp
    		pop ebp
    	}
    	return 0;
    }


  • 相关阅读:
    jvm误区--动态对象年龄判定
    jmeter入门实例
    七牛云的文件上传和下载
    layer.prompt添加多个输入框
    zero copy图解
    java枚举的线程安全及序列化
    java单例模式
    ubuntu16.04 python3.5 opencv的安装与卸载(转载)
    独家git clone 加速方法
    apt get update无法正常使用解决方案(转载)
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982546.html
Copyright © 2011-2022 走看看