#include <Stdio.h>char szFormat[] = "%s %s\n";
char szHello[] = "Hello";
char szWorld[] = " world";void main()
{
 __asm
{
MOV    EAX, OFFSET szWorld
PUSH   EAX
MOV    EAX, OFFSET szHello
PUSH   EAX
MOV    EAX, OFFSET szFormat
PUSH    EAX
CALL    printf// 压入了 3 个参数在堆栈中,调用函数之后要调整堆栈
ADD    ESP, 12
}
}
上述代码能正常运行将   MOV    EAX, OFFSET szWorld
    PUSH   EAX
    MOV    EAX, OFFSET szHello
    PUSH   EAX
    MOV    EAX, OFFSET szFormat
    PUSH    EAX
    CALL    printf   在vc6.0 DEBUG下转化成机器玛,并存入shellcode:
    unsigned char shellcode[] = "\xB8\x38\x4A\x42\x00\x50"
                            "\xB8\x30\x4A\x42\x00\x50"
                            "\xE8\x31\x00\x00\x00\x83"
                            "\xC4\x0C"#include <Stdio.h>char szFormat[] = "%s %s\n";
char szHello[] = "Hello";
char szWorld[] = " world";void main()
{
unsigned char shellcode[] = "\xB8\x38\x4A\x42\x00\x50"
                            "\xB8\x30\x4A\x42\x00\x50"
                            "\xE8\x31\x00\x00\x00\x83"
                            "\xC4\x0C";
( (void(*)(void)) &shellcode )();}编译能通过,但是运行却错误终止,为什么,请高手指点