第一次用堆践存放数据..学了一点花招..
比如如何不用声明压入一个字符串
push 000434550h
push 0534d4f43h
mov eax,esp
这里是压入一个
ASCII "COMSPEC"
代码:
callw macro x
extern C x:DWORD
call x
endm
.586
.model flat
locals @@
public C Start
.data
msg db ' /c del "',0
Cmd dd 0
.code
Start:
pushad
mov ebp,esp ;从VC中学来的~保存当前堆践寄存器
sub esp,150h
mov esi,esp ;申请一块空间来用
push 000434550h
push 0534d4f43h
mov eax,esp ;压入ASCII "COMSPEC"
push 100h
push esi
push eax
callw GetEnvironmentVariableA ;取环境变量...cmd的路径
push offset msg
push esi
callw lstrcatA ;连接字符串
mov Cmd,eax
sub esp,150h
mov edi,esp
push 100h
push edi
push 0
callw GetModuleFileNameA ;取自身路径
push 100h
push edi
push edi
callw GetShortPathNameA ;取段文件名
push edi
push Cmd
callw lstrcatA ;还是连接字符串
push 0022h
mov eax,esp ;字符串最后+上一个"
push eax
push Cmd
callw lstrcatA
push 0
push eax
callw WinExec ;执行自删除指令
mov esp,ebp ;恢复ESP数值..感谢VC
popad ;恢复个寄存器的数值
ret
end Start