Определение байтов во встроенной сборке GCC в Dev-C ++ (. Ascii в синтаксисе AT&T в Windows)

Приведенный ниже код просто показывает окно сообщения на экране.
Адреса жестко запрограммированы для облегчения:

int main ()
{
    asm("xorl %eax, %eax        \n"
        "xorl %ebx, %ebx        \n"
        "xorl %ecx, %ecx        \n"
        "xorl %edx, %edx        \n"
        "pushl %ecx             \n" //$0x0
        "pushl $0x20206c6c      \n" //"  ll"
        "pushl $0x642e3233      \n" //"d.23"
        "pushl $0x72657375      \n" //"resu"
        "movl %esp, %ecx        \n" //store "user32.dll" address in %ecx
        "movl $0x7c801d7b, %ebx \n" //store address of LoadLibraryA in %ebx
        "pushl %ecx             \n"
        "call *%ebx             \n"
        "movl $0xef30675e, %ecx \n"
        "addl $0x11111111, %ecx \n"
        "pushl %ecx             \n"
        "pushl $0x42656761      \n"
        "pushl $0x7373654d      \n"
        "movl %esp, %ecx        \n"
        "pushl %ecx             \n"
        "pushl %eax             \n"
        "movl $0x7c80ae40, %ebx \n"
        "call *%ebx             \n"
        "movl %esp, %ecx        \n"
        "xorl %edx, %edx        \n"
        "pushl %edx             \n"
        "pushl %ecx             \n"
        "pushl %ecx             \n"
        "pushl %edx             \n"
        "call *%eax             \n"
        "xorl %eax, %eax        \n"
        "pushl %eax             \n"
        "movl $0x7c81cb12, %eax \n"
        "call *%eax             \n"
    );
}

(я не комментировал весь код, потому что мой вопрос на самом деле не касается кода)

Мой вопрос: есть ли способ записать строку "user32.dll" в встроенная сборка без добавления вручную в стек? Я имею в виду это в NASM: db 'Hello'

Я знаю, что в синтаксисе AT&T я мог бы сделать .ascii 'Hello' или .string 'Hello' , но как насчет встроенного gcc?

Обратите внимание, что я использую Dev-C ++ в Windows XP SP3

Спасибо!

10
задан jyz 15 September 2010 в 13:51
поделиться