[GnuASM] printf gibt nicht alle datentypen aus
-
Abend an alle,
printf gibt hier nur "ascii" oder "string" als datentyp aus
Hier benutzte ich aber "int" und die ausgabe bleibt leer!.section .data value: .int 8 .section .text .type funk, @function funk: pushl %ebp movl %esp, %ebp subl $4, %esp movl $value, -4(%ebp) call printf addl $8, %esp pop %ebp ret .globl _start _start: call funk movl $1, %eax movl $0, %ebx int $0x80
Ich hab dann gleich ein beispiel gesucht bei dem printf funktioniert:
- habe einen C code bei dem ein interger über printf ausgegeben wird geschrieben und mir dem vom gcc erzeugten asm code angesehn :.file "casm.c" .section .rodata .LC0: .string "%d" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $36, %esp movl $3, -8(%ebp) movl -8(%ebp), %eax movl %eax, 4(%esp) movl $.LC0, (%esp) call printf movl $0, %eax addl $36, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)" .section .note.GNU-stack,"",@progbits
Ich habe also noch folgenede zeilen hinzugefügt:
.section .data value: .int 8 .section .rodata .LC0: .string "%d" .text .section .text .type funk, @function funk: pushl %ebp movl %esp, %ebp subl $8, %esp movl $.LC0, -8(%ebp) movl $value, -4(%ebp) call printf addl $8, %esp pop %ebp ret .globl _start _start: call funk movl $1, %eax movl $0, %ebx int $0x80
...Die Ausgabe ist immernoch LEER
Bestimmt kann mich einer von euch aufklären
Danke schonmal !Gruss darrell
-
Keiner ne Idee ???
...soll ich die frage anders formulieren, oder ist klar was gemeint ist ?
PS: freue mich über eine Aufklärung
-
Nope, ist im Grunde schon klar, denke ich. Koenntest vielleicht aber nochmal den Code mit Aenderungen posten.
Ich fuer meinen Teil bekomme aber leider von AT&T/GAS Augenkrebs.
-
Gut !
...hab jetzt die komplette änderung gepostet
-
Was mir ansonsten noch auffaellt ist nur: Versuch mal statt $value einfach $3 (wie der gcc). Ansonsten bleibt dir wohl nur weiter probieren... oder eben warten, bis jemand mit mehr Ahnung vom GAS hier vorbeischaut.
-
hatte ich auch schon versucht -> wieder keine ausgabe
-
ruf mal nach printf fflush(stdout) auf
-
Jetzt endlich, nach vielen Tagen!!!
Ich habe einen Weg gefunden wie printf integer ausgibt.
Ehrlich gesagt wundert es mich etwas :Es lag an der Deklaration vom Format-string:
.section .data format: .string "%i\n\0"
Warum im vom Compiler erzeugten asm code es auch ohne newline und term byte
funktioniert ist mir weiterhin ein Rätsel....Bin für jede Erklärung dankbar
Gruss darrel