Aşağıdaki kod ekranda yalnızca bir Mesaj Kutusu gösteriyor. GCC Inline Derlemesindeki Baytları Tanımlama Dev-C++ (Windows'da AT & T sözdiziminde ascii)
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"
);
}
Benim sorum (benim sorum kodu ilgili değil çünkü tüm kodu yorum yapmadı): yazmak için bir yolu var mı
adresleri kolaylaştırmak için önceden kodlanmıştır dizgeyi "user32.dll" derleme kümesine el ile itmeden, satır içi satır içi? Ben NASM'ın böyle demek: db 'Hello'
Ben & T sözdizimi AT I gcc inline yaklaşık .ascii 'Hello'
veya .string 'Hello'
ama nasıl yapabileceğinizi biliyor?
Windows XP SP3 ++
Teşekkür Dev-C kullanıyorum lütfen unutmayın!
Cool! "1:" ifadesi, dizenin adresi için bir etiket anlamına gelir mi? "Merhaba" adresini iterek "pushl $ 1b" talimatı var mı? Ne "? Önemsiz" yapar? Teşekkürler! – jyz
":" .previous "Windows üzerinde çalışıyor muyum? Yapamıyorum .. Dev-Cpp Portable kullanıyorum – jyz
@jyzuz: hayır, öyle değil, üzgünüm, bu konuda üzgünüm. Bu şekilde yuvarlak. '1:' gerçekten bir etiket ve '1b' ise onu ifade eder (güncellenmiş cevabımda bağladığım montajcı belgelerine bakın), bu yüzden evet,' 1 $ itmeli 'etiketin değerini iter. dizenin adresi - yığının üzerine bir sabit olarak. –