Ich möchte eine Funktion in Assembler von c aufgerufen werden, die ein Byte (Char) in die Datei schreiben wird. Hier ist, wie Funktion in c aussehen sollte:Schreibe Byte in Datei mit X86 Assembler
void writebyte (FILE *f, char b)
{
fwrite(&b, 1, 1, f);
}
Und hier ist der Code, dass es nennen:
#include <stdio.h>
extern void writebyte(FILE *, char);
int main(void) {
FILE *f = fopen("test.txt", "w");
writebyte(f, 1);
fclose(f);
return 0;
}
Bisher kam ich mit folgenden Assembler-Code auf:
.global writebyte
writebyte:
pushl %ebp
movl %esp, %ebp #standard params
pushl 12(%ebp) # pushing byte to the stack
pushl $1
pushl $1
pushl 8(%ebp) #file to write
call fwrite
popl %ebp
ret
Ich bekomme immer von gdb:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0xffa9702c in ??()
Wie schreibe ich eine solche Funktion in Assembly?
EDIT: Ich bin mit Ubuntu 16.04
Wie Sie Bibliothek mit Assembler nicht haben std haben, dann wird der Code OS-abhängig sein. – Matt
Ich benutze Ubuntu 16.04 – polyx
Der erste Parameter beim Aufruf von fwrite ist eine Adresse, die auf das Byte zeigt, nicht das Byte selbst; Wenn Sie davon ausgehen, dass Sie das Programm korrekt verknüpft haben, erhalten Sie höchstwahrscheinlich einen seg-Fehler, da fwrite versucht, Ihr Byte als Adresse zu verwenden und auf Speicher zuzugreifen, die nicht in Ihrem virtuellen Adressraum zugeordnet sind. –