Der folgende Code zeigt nur eine Message-Box auf dem Bildschirm.
Die Adressen werden erleichtern fest einprogrammiert:Definieren von Bytes in GCC Inline-Assembly in Dev-C++ (. ASCII in AT & T-Syntax unter 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"
);
}
(ich den Code nicht alle haben kommentieren, weil meine Frage nicht wirklich über den Code ist)
Meine Frage ist: Gibt es eine Möglichkeit das schreiben Zeichenfolge "user32.dll" in Assembly inline, ohne manuell auf den Stapel zu drücken? Ich meine, wie dies in NASM: db 'Hello'
Ich weiß, dass in AT & T Syntax I .ascii 'Hello'
oder .string 'Hello'
aber wie wäre es in gcc inline tun könnte?
Bitte beachten Sie, dass ich Dev-C++ auf Windows XP SP3
Dank bin mit!
Cool! Bedeutet "1:", dass es sich um eine Bezeichnung für die Adresse der Zeichenfolge handelt? Ist die Anweisung "pushl $ 1b" die Adresse von "Hello"? Was ".previous" tun? Vielen Dank! – jyz
": Funktioniert" .previous "unter Windows? Ich kann nicht .. Ich benutze Dev-Cpp Portable – jyz
@jyzuz: Nein, es scheint nicht; Entschuldigung, dass. Ich habe meine Antwort mit einem aktualisiert Übrigens: '1:' ist in der Tat ein Label, und '1b' bezieht sich darauf (siehe die Assembler-Dokumentation, auf die ich in meiner aktualisierten Antwort verlinkte); also drückt' push $ 1b' den Wert des Labels - was ist die Adresse des Strings - als Konstante auf den Stack. –