Приведенный ниже код просто показывает окно сообщения на экране.
Адреса жестко запрограммированы для облегчения:
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
Спасибо!