首页
社区
课程
招聘
[旧帖] [讨论]C++嵌入汇编,关于sub esp,4*n的问题,求解答 0.00雪花
发表于: 2012-8-29 20:12 1587

[旧帖] [讨论]C++嵌入汇编,关于sub esp,4*n的问题,求解答 0.00雪花

2012-8-29 20:12
1587
预览  
【讨论】C++嵌入汇编,关于sub esp,4*n的问题,求解答

--------------------------------------------------------------------------------
#include <windows.h>
#include<iostream>
using namespace std;

int main()
{

LPVOID addr_=GetProcAddress(LoadLibraryA("msvcrt.dll"),"system");
cout<<hex<<addr_<<endl;

// 77bf93c7
__asm{
   mov ebx,addr_

  nop
  nop
  nop
  push ebp
  mov ebp,esp

     sub esp,4*10   ;必须为4的倍数时才能显示成功弹出一个计算器,为什么??

  //"calc"
  mov byte ptr [ebp-05h],63h ;c
  mov byte ptr [ebp-04h],61h  ;a
  mov byte ptr [ebp-03h],6ch  ; l
  mov byte ptr [ebp-02h],63h  ;c
  mov byte ptr [ebp-1h],0  

   lea eax,[ebp-05h]  
  push eax   
     
  call ebx
  add esp,4
  

  mov esp,ebp
  pop ebp
  }   
            

return 0;
}

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 7
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
inc
2
当这样写时:
        。。。。。

             sub esp,9  

        //"calc"
              mov byte ptr [ebp-05h],63h ;c
        mov byte ptr [ebp-04h],61h  ;a
        mov byte ptr [ebp-03h],6ch  ; l
        mov byte ptr [ebp-02h],63h  ;c
        mov byte ptr [ebp-1h],0       

        lea eax,[ebp-05h]  
        push eax   ;OD调试:eax为"calc"的地址没错。。
     
  
        call ebx    ;OD调试ebx为system函数地址,也没错
        add esp,4
       

        mov esp,ebp
        pop ebp

为什么运行后什么都没显现?如果改为  sub esp,n(n为4的倍数),结果就对了。。求解释??
2012-8-29 20:16
0
雪    币: 61
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
因为对于32位PC机,内存都是按四字节对齐,尤其是栈,也就是esp的值,32位PC机,push pop指令都是固定的推入和弹出 四个 字节 , 具体我没拉你的代码去调试,不过按理应该是有一种专门检查esp的值的机制,当esp的值不是4的倍数的时候会产生一个异常。。。 64位CPU的话,就会变成8个字节。。。。会变成8的倍数
2012-8-29 22:54
0
雪    币: 7
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
inc
4
push eax   ;OD调试:eax为"calc"的地址没错。。
     
  
  call ebx    ;OD调试ebx为system函数地址,也没错

虽然说要按照4个字节对齐, 但是用OD调试,没发现什么异常,,就是不能运行,,
2012-8-31 21:22
0
游客
登录 | 注册 方可回帖
返回
//