对于栈中压入字符串请看:
http://blog.csdn.net/zcc1414/article/details/9668907
对于堆中压入字符串 也就是
mov 堆,数据
下面为例子:
int main()
{
__asm
{
push ebp
mov ebp,esp
xor ebx,ebx
push ebx
//尾部要加上 '\0' 也就是 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] //提示